问题
单项选择题
要是程序执行后的输出结果为ABCD, 应在横线处添加的语句( )。
#include<iostream>
using namespace std;
class A
public:A() cout<<'A';
class B:______
public:B() cout<<'B';
;
class C:virtual public A
public:C() cout<<'C';
;
class D:public B,public C
public:D() cout<<'D';
;
void main()D obj;
A) public A
B) private A
C) protected A
D) virtual public A
答案
参考答案:D
解析: 由主函数main入手,定义了类D对象obj。其中D为类B和C的公有继承,A是C的虚基类。题目中要求的输出结果为“ABCD”,依次为类A,类B,类C,类D中构造函数的输出语句。为了保证基类通过多条路径被派生类继承时,即保证A只被继承一次,输出一个A,所以不但需要声明A为C的虚基类,同样也要声明A为B的虚基类。