C++遗传问题14

考虑下面的C++程序。

null

#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){cout<< "4" ;}
};
class C: virtual A
{
public :
C(){cout<< "5" ;}
C( const C & obj){cout << "6" ;}
};
class D:B,C
{
public :
D(){cout<< "7" ;}
D( const D & obj){cout << "8" ;}
};
int main()
{
D d1;
D d(d1);
}


以下哪项未打印?

这个问题由Sudheendra Baliga提出 (A) 2. (B) 4. (C) 6. (D) 所有这些 答复: (D) 说明: 输出将是13571358 as 1357(对于D d1)和as 1358(对于D D(d1))……原因是……在继承期间,我们需要显式调用基类的复制构造函数,否则只调用基类的默认构造函数。还有一件事,因为我们在基类之前使用虚拟,所以在多重继承中基类只有一个副本。如果没有虚拟输出,将是……13157··························…对于每个派生类对象,分别为13158 as(1315713158)。 这个问题的小测验

© 版权声明
THE END
喜欢就支持一下吧
点赞11 分享