有以下代码:
#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;
}
执行该程序后,它将打印“55fun”。 Pochodna1和Pochodna2类中的构造函数调用发生了什么-它们被忽略了吗?为什么将Bazowa类的成员'x'设置为'55',而不是'101'或'103'?
最佳答案
虚拟基础构造函数总是从最终的叶子类中调用。虚拟基础的其他构造函数均未调用。在您的情况下,SuperPochodna()
正在调用Bazowa()
,并且不使用Bazowa(int)
和Pochodna1
中的Pochodna2
调用。
参见http://www.parashift.com/c++-faq-lite/multiple-inheritance.html#faq-25.14或仅谷歌“虚拟基础构造函数”。