
问题:
[单选] 若有以下程序:
#include
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< 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。 欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)