C++私有(private)虚拟继承问题

标签 c++ inheritance encapsulation virtual-inheritance private-inheritance

在下面的代码中,C 类似乎无法访问 A 的构造函数,这是由于虚拟继承所必需的。然而,代码仍然可以编译和运行。为什么会起作用?

class A {};
class B: private virtual A {};
class C: public B {};

int main() {
    C c;
    return 0;
}

此外,如果我从 A 中删除默认构造函数,例如

class A {
public:
    A(int) {}
};
class B: private virtual A {
public:
    B() : A(3) {}
};

然后

class C: public B {};

会(出乎意料地)编译,但是

class C: public B {
public:
    C() {}
};

无法按预期编译。

使用“g++ (GCC) 3.4.4 (cygming special, gdc 0.12, using dmd 0.125)”编译的代码,但已验证与其他编译器的行为相同。

最佳答案

根据C++ Core Issue #7不能派生具有虚拟私有(private)基的类。这是编译器中的一个错误。

关于C++私有(private)虚拟继承问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2371176/

相关文章:

c++ - 使用模板时无效使用非静态数据成员

c# - 当父类也实现 IDisposable 时在子类上实现 IDisposable

c++ - 继承和纯虚函数

docker - 如何链接多个Docker容器并封装结果?

java - 更喜欢非成员非友元函数......在 Java 中?

language-agnostic - 传入应该知道的参数不就隐式违反了封装吗?

c++ - 数字的按位运算是否出错

c++ - 用 boost spirit 分离 AST 创建和计算

c++ - 在 C++ 中用 vector 初始化 unordered_map

python - 仅在基类中获取属性(Python)