据我所知,virtual 确保只有一个基类属性的副本被继承到派生类。在多重继承中,首先调用所有基类的构造函数,然后调用派生类的构造函数。在下面的代码中,为什么 B 类的构造函数连续调用了两次?据我了解,输出应该是
B
B1
B2
D
但输出结果是
B
B
B1
B2
D
这是完整的代码。
#include <iostream>
class B
{
public:
B(){std::cout << "B" << std::endl;}
};
class B1:public B
{
public:
B1(){std::cout << "B1" << std::endl;}
};
class B2:virtual public B
{
public:
B2(){std::cout << "B2" << std::endl;}
};
class D:public B1, public B2
{
public:
D(){std::cout << "D" << std::endl;}
};
int main()
{
D d1;
}