有如下程序: #include<iostream> using namespace std; class Con { char ID; public: Con(): ID(W){ cout<<l; } Con(char ID): ID(ID) { cout<<2;} Con(Con& c): ID(c.getID()){ cout<<3;} char getlD0const {return ID;} }; void show(Con c){ cout<<c.getID(); } int main() { Concl; show(cl); Con c2(’B’); show(c2); return 0; } 执行上面程序的输出是 【10】 。
参考答案:13A23B
解析: 本题主要考查的是类的构造函数。一个类可以有多个构造函数,它们是一系列的重载函数,故创建对象时究竟应该调用哪个构造函数由传入的构造参数来决定。其中有两个构造函数最为特殊:一个是默认构造函数,它没有任何形参;另一个是拷贝构造函数,它的参数是一个自身类型的引用。当建立对象不传入任何构造参数时会调用默认构造函数,而用一个已创建的对象作为构造参数来创建一个新对象时会调用拷贝构造函数。在本题主函数中,先以默认构造声明了一个对象c1,此时会输出一个“1,c1的ID被初始化为’A’。然后调用show()函数,因为show()函数的形参c为Con类的对象,所以当show()函数被调用时,需要用实参值来实例化形参,即发生拷贝构造。故此时会输出一个“3”,然后在show()函数中会输出形参 c的ID,即c1的ID值“A”。接下来通过一个字符’B’构造另一个对象c2,此时调用的是第2个构造函数,输出一个“2”,然后又调用show()函数,拷贝构造函数再次被调用,输出一个“3”,最后在show()函数中输出c2的ID值“B”。所以执行完后输出的结果是13A23B。