有如下程序: #include <iostream> using namespace std; class A { public: A() { cout << "A"; } ~A() {cout << "

admin2009-06-20  34

问题 有如下程序:
   #include <iostream>
   using namespace std;
   class A {
   public:
       A() { cout << "A"; }
       ~A() {cout << "A"; }
   };
   class B {
       A a;
   public:
       B() {cout << "B"; }
        ~B() { cout << "B"; }
   };
   int main() {
       B b;
       return 0;
   }
程序的输出结果是【  】。

选项

答案ABBA

解析 本题考查的知识点是:类的构造与析构。建立一个类的对象时,构造函数的执行顺序如下:
①执行基类的构造函数,调用顺序按照各个基类被继承时声明的顺序(自左向右);
②执行成员对象的构造函数,调用顺序按照各个成员对象在类中声明的顺序(自上而下);(如果一行声明了多个对象,则还要遵循自左向右)
③执行自身的构造函数。
析构顺序与之相反。本题的B类没有基类,但有一个A类的成员a。所以构造B类对象时,先构造成员a再构造自身。因此,构造时输出的结果为AB,析构顺序严格与构造相反,故析构输出BA。所以程序最终输出结果是ABBA。
转载请注明原文地址:https://kaotiyun.com/show/iojp777K
0

最新回复(0)