【发布时间】:2019-01-12 04:09:45
【问题描述】:
#include<iostream>
using namespace std;
class A
{
public:
A(){ cout <<"1";}
A(const A &obj){cout <<"2";}
};
class B: virtual A
{
public:
B(){cout <<"3";}
B(const B & obj):A(obj){cout<<"4";}
};
class C: virtual A
{
public:
C(){cout<<"5";}
C(const C & obj):A(obj){cout <<"6";}
};
class D:B,C
{
public:
D(){cout<<"7";}
D(const D & obj):C(obj),B(obj){cout <<"8";}
};
int main()
{
D d1;
D d(d1);
}
我得到 13571468 作为输出。但我认为输出应该是 13572468。为什么正常的构造函数运行而不是 A 类的复制构造函数?
【问题讨论】:
-
只需提供一个
virtual ~A()析构函数。 -
嗯,我怀疑这真的可以被认为是一个骗局。
-
tpcg.io/oOKrrf这是问题的链接,请编辑并分享修改后程序的链接。
-
我花了一段时间才注意到它使用了虚拟继承。很有趣的问题
标签: c++ inheritance constructor copy-constructor virtual-inheritance