有以下程序 #include<iostream> using namespace std; class Base { private: char c; public: Base(char n):c(n

admin2009-02-15  74

问题 有以下程序    #include<iostream>    using namespace std;    class Base    {    private:      char c;    public:      Base(char n):c(n){}      ~Base()    {      cout<<c;    }    };    class Derived:public Base    {    private:       char c;    public:       Derived(char n):Base(n+1),c(n){}       ~Derived()       {         cout<<c;       }     };    int main()    {      Derived obj(’x’);      return 0;     }    执行后的输出结果是

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

答案2

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

最新回复(0)