问题 填空题

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

public:
Base()

x=0;

int x;

class Derived1:virtual public Base

public:
Derived1()

x=10;


class Derived2:virtual public Base

public:
Derived2()

x=20;


class Derived:public Derived1,protected Derived2

int main()

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

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

答案

参考答案:T

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

单项选择题
单项选择题