问题
填空题
有如下程序:
#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。