考虑下面的C++程序。
#include
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,即1357(对于D d1)和1358(对于D d(d1))……原因是……在继承期间,我们需要显式调用基类的副本构造函数,否则仅需要基类的默认构造函数叫做。还有一件事,因为我们在基类之前使用虚拟,所以在多重继承中将只有一个基类副本。如果没有虚拟输出,将分别为每个派生的类对象……13157…。&…13158作为(1315713158)。
这个问题的测验
想要从精选的最佳视频中学习和练习问题,请查看《基础知识到高级C的C基础课程》。