选择题
有如下程序:
#include<iostream>
#include<string>
using namespace std;
class TV{
public:
Tv(int s=2):size(s) {}
TV(const TV&t):size(t.size) {}
~TV() {cout<<size;}
private:
int size;
};
int main(){
TV room1(1), room2(room1), room3;
TV*roomPtr=new TV(3);
delete roomPtr;
return 0;
}
运行时的输出结果是______。
【正确答案】
A
【答案解析】由题意可知,输出size的值是在析构函数中,main函数中有四个对象room1,room2,room3和roomPtr指向的对象,在对象room1中,调用构造函数初始化size的值为1;对象room2中,调用复制构造函数用room1.size初始化,所以room2的size值也是1;对象room3中,调用默认构造函数size值是2;roomPtr指向的对象调用构造函数初始化size的值为3;在释放各个对象时,首先调用roomPtr指向的对象的析构函数,输出roomPtr指向对象的size值3;在程序运行结束后,编译器会按照对象构造顺序的相反顺序依次调用析构函数释放room3、room2、room1对象,所以依次输出211,综上输出结果为3211,答案为A选项。