问题标签 [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.

0 投票
3 回答
4277 浏览

c++ - 我可以使用 C 风格的转换将派生类转换为私有基类吗?

我可以这样做吗?

我可以采用从基类私有继承的子类并将其转换为其基类的公共版本吗?我可以在没有虚拟方法的情况下做到这一点吗?

我的猜测是肯定的,但我想确保它是安全/便携的。

0 投票
1 回答
332 浏览

c++ - 私有继承中的对象切片

为什么对象切片不会发生在私有继承中?Static_cast 在这种情况下会出错吗?我了解私有继承在其继承类之间不存在“is - a”关系。这是否与切片有关,因为 derived 不是 base 类型,所以编译器强制不进行隐式转换?

0 投票
1 回答
102 浏览

c++ - 私有库中的类型转换运算符

我在 C++ 中发现了一些我认为奇怪的行为:私有基类中的类型转换运算符在尝试解析隐式转换时使编译器感到困惑:

没有-DENABLE,代码编译得很好,并输出7. 使用-DENABLE,代码不再编译,抱怨一个模棱两可的重载。我试过了gcc-4.6.5gcc-4.8.1clang-3.3。令人困惑的是,我显然不能要求(bool)o,因为Base私人基地。

这是预期的行为吗?

0 投票
2 回答
101 浏览

c++ - 使用 C++ 中的组合计算对象实例化

在更有效的 C++ 中,迈耶斯描述了一种使用对象计数基类(第 26 项)来计算对象实例化的方法。是否可以使用如下组合技术来实现相同的功能。使用私有继承是否有特定的优势,在这种情况下使用组合有什么缺点。

ps:- 我已经重用了来自更有效的 C++ 的代码,并进行了少量修改。

0 投票
1 回答
271 浏览

c++ - 为什么 auto_ptr 似乎违反了 Visual C++ 上的私有继承?

背景信息:这是在 Visual Studio 2008 上检测到的,并在 Visual Studio 2013 上再次确认。G++ 对代码大喊大叫,而 Visual 默默地接受了私有继承漏洞。

因此,在 Visual C++ 上,我们有以下代码:

为什么第一个(临时)auto_ptr 会编译?我在调试中进入它,它完全按照公共继承应该做的事情(调用正确的构造函数等)

想知道问题是否与 auto_ptr 实现有关(我们永远不知道......),我减少了这个独立代码的问题:

同样,我希望代码不会编译,因为 Derived 是从 Base 私下继承的。

但是当我们创建一个临时的时,它就起作用了。

我们不能把它归咎于 std::auto_ptr。

我错过了标准中的某些内容(98 或 11 或 14),还是这是一个错误?

0 投票
1 回答
248 浏览

c++ - 如何使用私有继承的方法覆盖纯虚拟方法?

我有以下内容:

我无法实例化Concrete,因为纯虚方法AbstractMethod未被覆盖。我究竟做错了什么?

0 投票
2 回答
475 浏览

c++ - 具有 enable_shared_from_this 的类与结构

我有个问题。我正在玩,enable_shared_from_this并注意到一个奇怪的事情。这个例子工作正常:

但是当我改变structclass时停止编译!

错误说:

有谁知道为什么会这样?

0 投票
3 回答
706 浏览

c++ - 为什么私有继承不能解决静态函数的歧义?(在 MSVC 中测试)

我想知道为什么对静态函数的调用是模棱两可的,即使两者之一显然不可能调用,因为它是私有的。我希望我可以使用私有/受保护的继承来帮助编译器解决歧义。

它是特定于 MSVC 还是在标准中以某种方式指定?

背景是我试图通过继承它来重用许多派生类(C,D,E,F,G)中的重载行为(A中的行为),以某种方式遵守不重复的规则你自己。

0 投票
2 回答
570 浏览

c++ - “使用”声明为 SFINAE

我可以using在从模板类派生私有时使用 SFINAE(或其他技术)进行声明吗?为了更好地理解,请参见下面的代码:

我怎样才能达到期望的行为(如果可能的话)?

0 投票
1 回答
178 浏览

c++ - 编译器可以删除(虚拟)私有基类吗?

给定以下示例:

问题 1:是否允许编译器优化基类 A,因为这个基类不能真正影响 B 或它的运行时行为?

问题 2:如果继承像这样声明为 private virtual,这种情况会改变吗?