问题
填空题
有下列程序: #include<iostream> using namespace std; class Con { char ID; public:Con():ID(’A’){cout<<1;}Con(char ID) :D(ID) {cout<<2;}Con(Con& c):ID(c.getID()){cout<<3;}char getID()const{return ID;} }; void show(COn c){cout<<c.getID();} int main() { Con c1; show(c1); Con c2(’B’); show(c2); retum 0; } 执行上面程序的输出结果是______。
答案
参考答案:13A23B
解析:
此题考查的是类的构造函数。一个类如果有两个构造函数,一个是默认构造函数,它没有任何形参;一个是复制构造函数,它的形参是一个自身类型的引用,这种情况下,当建立对象不传入任何构造参数时会调用默认构造函数,而用一个已创建的对象作为构造参数来创建一个新对象时会调用复制构造函数。本题中,构造函数声明对象c1,此时输出“1”;然后调用show()函数,会发生复制构造,输出“3”,show()函数输出“A”:接着通过字符′B′构造对象c2,此时调用第二个构造函数,输出“2”;然后又调用show0函数,输出“3”,在show()函数中输出“B”。故最终的输出结果为13A23B。