帮我看看这个构造函数为什么是无限递归
class complex
{
double re,im;
public:
complex(complex c):re(c.re),im(c.im){}
}
中的complex(complex c):re(c.re),im(c.im){}为什么是无限递归呢
问题点数:20、回复次数:7Top
1 楼Jinhao(辣子鸡丁·GAME就这样OVER了)回复于 2006-02-04 13:26:57 得分 0
一个不被允许的“拷贝构造函数”Top
2 楼du51(郁郁思扬)回复于 2006-02-04 13:42:47 得分 0
楼主说递归当非空穴来风.
我理解是这样的:
在拷贝构造时,因为是传值.所以,形成一份拷贝.这份拷贝在拷贝的时候调用拷贝构造.
以此类推,形成无限归.
解决之道:
complex(complex &c):re(c.re),im(c.im){}//禁止拷贝,调用自身.
至于私有赋值.因为同类对象互为友元.无需考虑.
我也不大明白.推测而已.Top
3 楼syhan(藏书人)回复于 2006-02-04 14:21:27 得分 0
本来你这个复数类就是在这里定义的,现在你的构造函数就把这个复数类的对象作为参数了,当然是会产生无穷递归咯Top
4 楼ediedone(忆男)回复于 2006-02-04 16:09:17 得分 0
同意du51(郁郁思扬)
下面这样应该可以
complex(const complex &c):re(c.re),im(c.im){}Top
5 楼shenjonken(梦想男孩)回复于 2006-02-04 19:29:13 得分 0
谢谢,想想好像是这个原因啊,怎么能给人加分呢Top
6 楼ediedone(忆男)回复于 2006-02-05 14:56:25 得分 0
点管理结帖Top
7 楼popy007(Twinsen)回复于 2006-02-05 15:27:05 得分 0
这不是一个正统意义上的copy-constructor,即X(&X)形式。
他只是用bitcopy的方法进行逐位拷贝进行实例的构造。
但他也是一个constructor,在执行
complex(complex c)的时候,比如
complex mycomplex(anycomplex);的时候,
compiler会为c调用该constructor,相当于
c = complex(anycomplex),后面右会调用
一次该contructor一致反复下去。
而complex(angcomplex)又会再次调用该Top




