📜  C++ |继承|问题14

📅  最后修改于: 2021-05-26 00:42:10             🧑  作者: Mango

考虑下面的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基础课程》。