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

admin2010-03-29  63

问题 若有以下程序:    #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、10
B、20
C、30
D、0

答案2

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

最新回复(0)