有如下程序: #include using namespace std; class Base{ int m; public: Base(){ cout

admin2015-07-22  28

问题 有如下程序:
     #include
     using namespace std;
     class Base{
         int m;
     public:
         Base(){ cout<<"B1"; }
         Base(int m1): m(m1){ cout<<"B2"; }
     };
     class Mid1: virtual public Base{  };
     class Mid2: virtual public Base{  };
     class Derived:  public Mid2, public Mid1{
     public:
          Derived(int n): Base(n){ cout<<"D"; }
     };
     int main(){
          Derived obj(5);
          return 0;
     }
运行上述程序的输出结果是

选项 A、B1B1D
B、B1B2D
C、B1D
D、B2D

答案D

解析 虚继承中,无论虚基类出现在继承层次中的任何地方,总是在构造非虚基类之前构造虚基类;程序中首先构造虚基类Base,调用Base的构造函数Base(int m1),输出"B2";然后构造非虚基类,按照Derived的派生列表顺序,首先构造Mid2部分,忽略Mid2构造函数初始化列表中Base的初始化式,再构造Mid1部分,同样忽略Base的初始化式,最后构造Derived部分,执行函数体,输出"D";整个程序结果为:"B2D";答案为D。
转载请注明原文地址:https://jikaoti.com/ti/XzE0FFFM
0

最新回复(0)