CSDN首页 空间 新闻 论坛 Blog 下载 读书 网摘 搜索 .NET Java 视频 接项目 求职 在线学习 买书 程序员 通知
山寨机中的战斗机! 程序优化工程师到底对IT界有没有贡献
CSDN社区
搜索 收藏 打印 关闭
CSDN社区 >  C/C++ >  C++ 语言

帮我看看这个构造函数为什么是无限递归

楼主shenjonken(梦想男孩)2006-02-04 13:11:41 在 C/C++ / C++ 语言 提问

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

相关问题

  • 递归函数
  • 递归函数?
  • 构造函数中的无限循环????
  • 应该怎么构造这个递归函数才能正确输出
  • 构造函数
  • 构造函数
  • 构造函数??
  • 构造函数
  • 函数构造
  • @@@@@@ 构造函数 @@@@@

关键词

  • 函数
  • 拷贝
  • im
  • 递归
  • complex
  • 构造
  • 调用
  • re
  • constructor
  • 时候

得分解答快速导航

  • 帖主:shenjonken

相关链接

  • C/C++ Blog
  • C/C++类图书
  • C/C++类源码下载

广告也精彩

反馈

请通过下述方式给我们反馈
反馈
提问
网站简介|广告服务|VIP资费标准|银行汇款帐号|网站地图|帮助|联系方式|诚聘英才|English|问题报告
北京创新乐知广告有限公司 版权所有, 京 ICP 证 070598 号
世纪乐知(北京)网络技术有限公司 提供技术支持
Copyright © 2000-2008, CSDN.NET, All Rights Reserved
GongshangLogo