若有以下程序: #include<iostream>usingn

若有以下程序: #include<iostream>usingnamespacestd; classBase{public: Base() {x=0;}intx;}; classDerivedl:virtualpublicBase{public: Derivedl() {x=10;}}; classDerived2:virtua11publicBase{public: Derived2

问题:

[单选] 若有以下程序:
#include<iostream>
usingnamespacestd;
classBase
{public:
Base()
{x=0;}
intx;};
classDerivedl:virtualpublicBase
{public:
Derivedl()
{x=10;}};
classDerived2:virtua11publicBase
{public:
Derived2()
{x=20;}};
classDerived:publicDerivedl,protectedDerived2{};intmain()
{Derivedobj;
cout<<obj.x<<endl;
return0;}
该程序运行后的输出结果是(  )。

A . 20
B . 30
C . 10
D . 0

参考答案:A

参考解析:

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

联系我们

联系我们

查看联系方式

邮箱: 2643773075@qq.com

工作时间:周一至周五,9:00-17:30,节假日休息

关注微信
微信扫一扫关注我们

微信扫一扫关注我们

返回顶部