对于不提供默认构造函数的类,是否可以具有虚拟继承?
当前的菱形图(最简单的一个,没有提供默认构造函数的唯一更改)不编译(g ++ 4.4.3).
class A {
public:
A(int ) {}
};
class B : virtual public A {
public:
B(int i) : A(i) {}
};
class C : virtual public A {
public:
C(int i) : A(i) {}
};
class D : public B, public C {
public:
D(int i) : B(i), C(i) {}
};
Run Code Online (Sandbox Code Playgroud)
谢谢,弗朗西斯科
Pra*_*rav 22
你需要在A这里显式调用构造函数
D(int i) : A(i), B(i), C(i) {}
Run Code Online (Sandbox Code Playgroud)
虚基类是特殊的,因为它们由最派生的类初始化,而不是从虚拟基础继承的任何中间基类.初始化一个碱基的正确选择是哪个潜在的多个初始化器?
如果正在构造的派生类最多的类没有在其成员初始化列表中列出它,则使用其默认构造函数初始化虚拟基类,该构造函数必须存在且可访问.
从这里无耻地复制:-)
| 归档时间: |
|
| 查看次数: |
5109 次 |
| 最近记录: |