若有以下程序: #include <iostream> using namespace std; class Base public: Base() { x=0; } int x; }; class Derivedl: virtua

admin2010-03-29  20

问题 若有以下程序:  #include <iostream> using namespace std; class Base public:   Base()   {     x=0;  }   int x; }; class Derivedl: virtual public Base public:   Derived1()     {      x=10;  } }; class Derived2: virtual public Base publici   Derived2()     x=20; }; class Derived :public Derived1,protected Derived2 {}; int main()  Derived obj;   cout<<obj.x<<end1;  return 0; } 该程序运行后的输出结果是

选项 A、20
B、30
C、10
D、0

答案1

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

最新回复(0)