问题 单项选择题

若有以下程序:
#include <iostream>
using namespace std;
class Base

public:
Base()

x=0;

int x;
;
class Derivedl: virtual public Base

public:
Derivedl()

x=10;

;
class Derived2: virtual public Base

public:
Derived2()
(
x=20;

;
class Derived: public Derivedl,protected Derived2 ;
int main()

Derived obj;
cout<<obj.x<<end1;
return 0;

该程序运行后的输出结果是

A.20

B.30

C.10

D.0

答案

参考答案:A

解析: 本题考核虚基类的应用。本题中,虽然Derivedl和Derivec[2都是由共同的 基类x派生而来的,但由于引入了虚基类,使得它们分别对应基类的不同副本。这时数据成员x只存在一份拷贝,不论在类Derivedl中修改,还是在类Derivect2中修改,都是直接对这惟一拷贝进行操作。本题程序执行语句“Derived obj;”时,就会先调用虚基类Base的构造函数,使得x=0,然后执行类Derivedl的构造函数使得 x=10,再执行类Derived2的构造函数,使得x=20。最后输出x的值为20。

单项选择题
问答题 简答题