【发布时间】:2013-01-04 19:50:05
【问题描述】:
在此代码中,当创建 DR 对象时,字符串“Hello World”应该打印 4 次,而不是只打印 3 次。为什么会这样? 据我推测,这是因为 mid1 和 mid2 实际上是继承的。 谁能解释一下当我们虚拟继承一个类时会发生什么,更重要的是它什么时候有用?为什么?
#include <iostream>
struct BS
{
BS()
{
std::cout << "Hello World" << std::endl;
}
unsigned int color;
};
struct mid1 : virtual public BS { };
struct mid2 : virtual public BS { };
struct mid3 : public BS { };
struct mid4 : public BS { };
struct DR : public mid1, public mid2,
public mid3, public mid4 { };
int main(int argc, char** argv)
{
DR d;
return 0;
}
【问题讨论】:
-
您的意思是““Hello World”应该打印 3 次,所以是这样。”?
-
没有,根据我所掌握的有限知识,它计算为 4。但它正在打印 3。我想知道原因。
-
作为记录,this answer 解释得很好。
-
@K-ballo:我知道编译器会这样。我想知道原因。
标签: c++ inheritance virtual