有如下程序 #include using namespace std; class AA{ char c; public: AA():c(’X’){ } AA(A

admin2015-07-22  24

问题 有如下程序
     #include
     using namespace std;
     class AA{
         char c;
     public:
         AA():c(’X’){ }
         AA(AA &aa):c(aa.c){ cout<<2; }
         ~AA(){ cout<<3; }
         char value()const{ return c; }
     };
      void f1(AA a){ cout<      void f2(AA &a){ cout<     int main(){
         AA m;
         f1(m);
         f2(m);
         return 0;
     }
运行这个程序的输出是

选项 A、2X3X3
B、2X3X3
C、X3X3
D、XX3

答案A

解析 程序使用默认构造函数创建AA类对象m,使得m中数据成员c=’X’,然后调用f1函数,由于函数f1形参为AA类对象,需要创建局部对象a,并使用实参m初始化,所以需要调用复制构造函数,输出"2";再执行f1函数体,输出"X",f1函数执行完后,需要销毁局部对象a,调用AA的析构函数,输出"3";再调用f2函数,f2函数的形参为AA类引用,因而不需要调用构造函数,直接执行函数体输出"X",当然,由于没有创建局部对象,f2函数执行完之后也不需要销毁任何数据;最后main执行结束,需要销毁对象m,调用AA的析构函数,输出"3";整个程序输出结果为:"2X3X3",答案为A。
转载请注明原文地址:https://kaotiyun.com/show/LVNp777K
0

最新回复(0)