给出如下代码段,请分析编译运行结果,并作说明;
#include <iostream>
using namespace std;
class A
{
private:
int value;
public:
A(int n)
{
value = n;
}
A(A other)
{
value = other.value;
}
void Printf()
{
cout << value << endl;
}
};
int main()
{
A a = 10;
A b = a;
b.Printf();
system("pause");
return 0;
}
上机结果:
原因解释:
错误之处在于复制构造函数传入的参数是一个实例,直接传入了一个类,相当于值传递,这样在将形参复制到实参调用复制构造函数A (A other),如此便陷入递归循环,造成栈溢出。
解决方法:
C++标准不允许复制构造函数传值参数,解决方法是将有参构造函数A (A other)修改为A(const A &other),将传值参数改为常量引用。
修改后结果: