问题
填空题
若有以下程序:
#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〈〈end1;
return 0;
该程序运行后的输出结果是〈u〉 【15】 〈/u〉。
答案
参考答案:T
解析: 本题中,虽然Derived1和Derived2都是由共同的基类Base派生而来的,但由于引入了虚基类,使得它们分别对应基类的不同副本。这时数据成员 x只存在一份拷贝,不论在类Derived1修改,还是在类Derived2中修改,都是直接对这惟一拷贝进行操作。本题程序执行语句“Derived obj”时,就会先调用虚基类Base的构造函数,使得x=0,然后执行类Derived1的构造函数使得x=10,再执行类Derived2的构造函数,使得x=20。最后输出x的值为20。