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

admin2013-05-30  21

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

选项

答案20

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

最新回复(0)