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

admin2010-03-29  25

问题 有以下程序:
   #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
   {
   public:
   Derived2()
   {
     x=20;
   }
   };
   class Derived: public Derived1,protected Derived2
   { };
   int main()
  {
   Derived obj;
   cout<<obj.x<<endl;
   return 0;
    该程序运行后的输出结果是【  】。

选项

答案20

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

最新回复(0)