问题
单项选择题
有如下程序: #include<iostream.h> using namespace std; class Demo { public:Demo(){ cont<<"default constructor\n";}Demo(const Demo &x){ cont<<"copy constructor\n";} }; Demo userCode(Demo b){Demo c(b);return c;} int main() {Demo a,d;cout<<"calling userCode()\n";d=userCode(a);return 0; } 执行上面程序的过程中,构造函数Demo()和Demo(const Demo &x)被调用的次数分别是
A.1和1
B.1和2
C.2和3
D.2和4
答案
参考答案:C
解析: 本题考核构造函数的应用,有一定的深度。函数Demo()为构造函数,而 Demo(const Demo &x)为复制构造函数。C++在创建一个对象时,会自动调用类的构造函数,所以语句“Demo a,d;”将调用函数Demo()2次。当一个对象作为实参传递给函数时为初始化形参,要调用拷贝构造函数;在函数返回一个对象时调用拷贝构造函数。由此可知语句“d=userCode(a);”调用复制构造函数3次。