问题标签 [private-inheritance]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
c++ - 如果继承不是公开的而不是出错,为什么 enable_shared_from_this 会崩溃
我在一个项目中使用 shared_ptr 。在某一时刻,我不得不将原始指针存储为 void,然后在传递 void* 的回调中将其转换回其 shared_ptr 形式。但由于某种原因,代码不断崩溃。我不明白为什么,因为我没有收到任何编译器错误或警告。但我注意到,当我从那里继承时,std::enable_shared_from_this
我并没有将它指定为公共继承。这就是导致崩溃的原因。
我写了一个示例代码,我只是想知道为什么会这样。
所以该代码将执行并运行良好,我得到了预期的结果。
但是当我从继承中删除 public 时:
然后它会导致崩溃。那么为什么public
在这里有所作为,为什么编译器不给出警告/错误呢?
c++ - shared_ptr 和 weak_ptr 失败的小例子
我在使用shared_ptr
和weak_ptr
时遇到问题enable_shared_from_this
。
当我用谷歌搜索我所看到的症状时,每个人都建议“shared_from_this()
当没有shared_ptr
实例拥有你的对象时,你不能使用。
但这不是我的情况。
考虑这段代码:
这两种方法MyClass
都会使程序崩溃。我一定遗漏了一些明显的东西——它是什么?
c++ - 我可以为类的前向声明省略非公共继承吗?
假设我有一段这样的代码:
前向声明类Foo.h
是否符合标准?如果是,从哪个语言版本开始?protected
继承又如何呢?
c++ - 不可访问的虚函数的模糊访问
考虑这段代码:
编译器正在考虑d.foo()
一个模棱两可的调用,尽管两者d.B::foo()
和d.C::foo()
对用户来说都是不可访问和隐藏的。唯一有效的调用应该是d.A::foo()
,为什么编译器会模棱两可?
c++ - 通过私有继承覆盖公共别名方法
我有一个类层次结构,其中有一个Base
带有实现列表的基类型和另一个基类,AnotherBase
这几乎是一样Base
的,但有点不同。为了用语言表达这一点,我在第二个基类上使用了私有继承(因此后者的实现与前者的实现之间没有原样的关系)。
假设这是代码(https://wandbox.org/permlink/2e2EG0eKmcLiyvgt)
当我尝试编译上述代码时,出现以下错误
如果这不起作用,表达上述想法的最佳方式是什么?还有为什么它不起作用?
c++ - 向上转换为与私有继承的接口
我有以下情况
我想给出一个 ComplicatedObject 的简化版本,仍然提供接口。我在考虑私有继承,例如
但是,当然,我不能像
组合是唯一的出路吗?还是有一些解决方法?像隐式转换
c++ - C ++如何指向类中的私有继承类对象
我正在学习类继承,我想知道如何创建指向另一个类私有继承的类的指针?我在下面包含了一个简单的示例。非常感谢那些帮助回答这个问题的人。
c++ - 私有继承的直接基类防止派生类定义间接基类的对象
喜欢这段代码
Try a 是本地对象,不是 C1 的一部分,为什么会出错?
只要是私有继承的直接基类,就不能在其派生类中定义间接基类对象吗?是因为无法使用构造函数还是其他原因?
polymorphism - C ++如何私有继承防止多态性?
为什么我不能在 (3) 中使用多态性?即使在添加using A::A;
(2)之后它也不会编译。我预计它会在添加using A::A;
(2) 后与 (1) 相同,using A::run
但不幸的是,它没有编译。(3) 中的这一行如何被解释以导致这种行为?
c++ - 将私有继承的 Base 的类构造函数带入 Derived 的公共范围
从 C++ 中的私有模板类继承构造函数,
解释了using Base::Base;
在内部Derived
我们将Base
注入的类型Base
作为Base::Base
作用域Derived
而不是实际Base
的 c-tor(s)。我很感兴趣,whys
而且hows
比上面提到的问题更深入。
在下面的代码片段中,有 3 个模板类MyVector...
继承自 std::vector。我很好奇为什么using Super::vector;
还不足以让事情为private
和protected
案例工作?它不应该将vector
с-tor带入 'public
的MyVector...
范围,从而改变对它的访问权限,就像其他成员(如at
and )一样push_back
?如果我们尝试using Super::vector;
将构造函数与. 即使它是一种类型,为什么语言不像它那样公开访问它?C2923
Super::vector
IsAType
using Super::iterator;
错误 C2247:“std::vector<int,std::allocator>”不可访问,因为“MyVectorProtected”使用“protected”从“std::vector<int,std::allocator>”继承
错误 C2247:“std::vector<int,std::allocator>”不可访问,因为“MyVectorPrivate”使用“private”从“std::vector<int,std::allocator>”继承
错误 C2923:“IsAType”:“std::vector<int,std::allocator>::{ctor}”不是参数“T”的有效模板类型参数
更新: 所以看起来真正的原因是当我们谈论构造函数时,标准忽略了使用声明访问修饰符:http: //eel.is/c++draft/namespace.udecl#14 http://eel.is/c ++draft/namespace.udecl#16 如果我错了,请纠正我。