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

admin2019-07-10  31

问题 有如下程序:
     #include
     using namespace std;
     class AA{
     public:
         AA(){ cout<<"A"; }
         ~AA(){ cout<<"a"; }
     };
     class BB: public AA{
         AA aa;
     public:
         BB(){ cout<<"B"; }
         ~BB(){ cout<<"b"; }
     };
     int main(){
         BB bb;
         return 0;
     }
运行这个程序的输出是

选项 A、AABaab
B、AABbaa
C、BAAaab
D、BAAbaa

答案B

解析 首先,构造函数的工作过程:1、派生类的构造函数在执行函数体之前调用基类的构造函数初始化基类;2、在执行函数体之前根据声明次序初始化自己的成员;3、执行自身函数体。所以程序中在创建BB对象时,首先调用AA的构造函数,输出"A",然后初始化类BB中的成员aa,调用AA的构造函数,输出"A",最后执行函数体,输出"B";
  程序执行结束时,系统会自动调用类的析构函数,析构函数工作过程:1、执行析构函数的函数体;2、如果该类中拥有类对象成员,且类对象有析构函数,则以类对象成员声明次序的相反顺序调用其析构函数,销毁类对象成员;3、按原来构造顺序的相反顺序向上依次调用基类的析构函数。所以程序运行结束时,首先调用BB的析构函数并执行函数体,输出"b";然后调用aa的析构函数,销毁aa成员,输出"a";最后调用基类AA的析构函数,输出"a";综上所述,程序运行的输出是:"AABbaa";答案为B。
转载请注明原文地址:https://kaotiyun.com/show/rP8p777K
0

最新回复(0)