有如下程序: #include using namespace std; class Base1{ public: Base1(){ } ~Base1(){ cout

admin2021-09-05  30

问题 有如下程序:
     #include
     using namespace std;
     class Base1{
     public:
         Base1(){ }
         ~Base1(){ cout<<"b1"; }
     };
     class Base2{
     public:
         Base2(){ }
         ~Base2(){ cout<<"b2"; }
     };
     class Derived: public Base2,public Base1{
     public:
         Derived(){ }
         ~Derived(){ cout<<’d’; }
     };
     int main(){
         Derived obj;
         return 0;
     }
运行这个程序的输出是

选项 A、b1b2d
B、b2b1d
C、db1b2
D、db2b1

答案C

解析 派生类构造函数都是先调用基类构造函数,再根据声明次序定义数据成员,另外对于多继承,派生类的构造函数初始化列表中,基类构造函数是按照基类在派生类的派生列表中出现的次序调用的;由于Derived类的派生列表中,Base2在前,所以应该先调用Base2的构造函数,再调用Base1的构造函数;销毁派生类对象时,总是按照构造函数运行次序的相反顺序调用析构函数,首先运行派生类析构函数,然后按继承层次依次向上调用各基类函数;所以Derived对象销毁时,首先调用Derived的析构函数,接着调用Base1的析构函数,最后调用Base2的析构函数;输出结果为:"db1b2",答案为C。
转载请注明原文地址:https://jikaoti.com/ti/7rc0FFFM
0

最新回复(0)