有这个代码:
#include <iostream>
class Bazowa
{
int x;
public:
Bazowa() : x(55){}
Bazowa(int x_) : x(x_) {}
void fun()
{
std::cout << x << "fun\n";
}
};
class Pochodna1 : virtual public Bazowa
{
public:
Pochodna1() : Bazowa(101) {}
};
class Pochodna2 : virtual public Bazowa
{
public:
Pochodna2() : Bazowa(103) {}
};
class SuperPochodna : public Pochodna1, public Pochodna2
{
public:
SuperPochodna() : {}
};
int main() {
SuperPochodna sp;
sp.fun(); // prints 55fun
return 0;
}
Run Code Online (Sandbox Code Playgroud)
执行该程序后,将打印"55fun".在Pochodna1和Pochodna2类中构造函数调用发生了什么 - 它们被忽略了吗?为什么班级Bazowa的成员'x'被设置为'55',而不是'101'或'103'?
始终从最终叶类调用虚拟基础构造函数.不会调用虚拟基础的其他构造函数.在你的情况下SuperPochodna()
是调用Bazowa()
和调用Bazowa(int)
in Pochodna1
和Pochodna2
不使用.
请参阅http://www.parashift.com/c++-faq-lite/multiple-inheritance.html#faq-25.14或只是谷歌"虚拟基础构造函数".