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

admin2009-02-15  18

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

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

答案1

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

最新回复(0)