| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1286 人关注过本帖
标题:关于拷贝构造函数
只看楼主 加入收藏
song4
Rank: 7Rank: 7Rank: 7
等 级:贵宾
威 望:38
帖 子:1533
专家分:4
注 册:2006-3-25
收藏
 问题点数:0 回复次数:9 
关于拷贝构造函数
老师昨天留个作业
让我们讨论为什么拷贝构造函数要用引用

我认为是如果不用引用传递的实参将会给行参
同时调用行参的拷贝构函,然后又会调用行参的行参
一直下去系统资源有威胁
所以只能用引用
免去麻烦
请问各位 这个观点对吗
搜索更多相关主题的帖子: 函数 构造 拷贝 
2006-04-12 20:21
gototheworld
Rank: 1
等 级:新手上路
帖 子:218
专家分:0
注 册:2006-3-24
收藏
得分:0 
以下是关于拷贝构造函数的定义,或许能对你有些帮助!
每当编译器需要从现有的对象创建新对象时,可以通过定义自己的函数做这些。因为是在创建新对象,所以,这个函数应该是构造函数,并且传递给这个函数的单一参数是创立对象的源对象。但是这个对象不能通过按值传递方式传入构造函数,因为正在试图定义的函数是为了处理按值传递方式的,而且按句法传递一个指针是没有意义的,毕竟我们正在从现有的对象创建新对象。这里,引用就起了作用了,可以是用源对象的引用。这个函数被称为拷贝构造函数,他经常被称为X(X&)。

你理解了这段话,就知道为什么要用引用了。

路漫漫其修远兮 吾将上下而求索
2006-04-12 22:56
柳儿
Rank: 6Rank: 6
等 级:贵宾
威 望:25
帖 子:1830
专家分:30
注 册:2004-9-23
收藏
得分:0 
感觉有点象理发师悖论,一个怪圈。

成功会使人骄傲。如果你骄傲自大,你就会停止学习。不学习,人就停止了进步
2006-04-13 10:29
lululau
Rank: 1
等 级:新手上路
帖 子:13
专家分:0
注 册:2005-12-13
收藏
得分:0 
因为正在试图定义的函数是为了处理按值传递方式的,而且按句法传递一个指针是没有意义的,毕竟我们正在从现有的对象创建新对象

这句还是不明白

好好学习 天天向上
2006-04-13 11:33
gototheworld
Rank: 1
等 级:新手上路
帖 子:218
专家分:0
注 册:2006-3-24
收藏
得分:0 

如果这里X(X x)不是用引用的话,对象就是按位拷贝进x,但是位拷贝就是一位一位地复制.在类产生之前的c语言里,这样做很合适,但是类产生之后呢?类的对象如果只是进行简单的位拷贝,而不管类里的成员指针应不应该改变,构造函数的语句应不应该执行,这很可能产生错误。


路漫漫其修远兮 吾将上下而求索
2006-04-13 17:30
gototheworld
Rank: 1
等 级:新手上路
帖 子:218
专家分:0
注 册:2006-3-24
收藏
得分:0 
以下是引用lululau在2006-4-13 11:33:00的发言:
因为正在试图定义的函数是为了处理按值传递方式的(这里说的是处理方式而不是传递方式,处理的方法就是用源对象创建一个新对象,所以说是为了处理按值传递方式),而且按句法传递一个指针是没有意义的(如果传递指针的话还需要一个取址的过程,显然不如引用,当然这里还有其他原因,不够我也不是什么原因,以后会学到的,),毕竟我们正在从现有的对象创建新对象


路漫漫其修远兮 吾将上下而求索
2006-04-13 17:37
ElfDN
Rank: 4
等 级:贵宾
威 望:11
帖 子:291
专家分:0
注 册:2005-11-13
收藏
得分:0 
引用也是指针,但是他是被保护的指针,就像是被限定的

2006-04-14 08:46
song4
Rank: 7Rank: 7Rank: 7
等 级:贵宾
威 望:38
帖 子:1533
专家分:4
注 册:2006-3-25
收藏
得分:0 
呵呵
2楼和我说的不是一个意思吗 但我理解不是你那个角度

就是例如 STUDENT(STUDENT )//不加&
student s(t);
那么S就会调用拷贝函数.
而实际上T的值给了一个中间变量(所有的非引用函数参数传递基本上都是调用一个隐型的中间变量做桥梁)  例如:函数返回值就是这样先return到一个中间变量然后在付给程序上的 因为要返回的值和你=号左面的作用域不同,需要一个桥梁
而在给中间变量时又会调用中间变量(假如TEMP)的拷贝函数,
再调用TEMP的中间变量TEMP1的拷贝函数....
这样就有个死循环了

而7楼说的我不敢认同  这里引用最好不要当指针理解 把它当成实参实体好一些

嵌入式 ARM 单片机 驱动 RT操作系统 J2ME LINUX  Symbian C C++ 数据结构 JAVA Oracle 设计模式 软件工程 JSP
2006-04-16 13:26
guang
Rank: 4
来 自:广东深圳
等 级:贵宾
威 望:13
帖 子:1414
专家分:285
注 册:2006-4-3
收藏
得分:0 

可不可以举个实例说下?


不相信未作牺牲竟先可拥有,只相信靠双手找到我的欲求!!
我的博客:http://liao5930.blog.
2006-04-23 23:15
song4
Rank: 7Rank: 7Rank: 7
等 级:贵宾
威 望:38
帖 子:1533
专家分:4
注 册:2006-3-25
收藏
得分:0 
就是把拷贝构造函数里面引用去掉
为什么会不行
student(const student );
这个函数机理是什么

会引起无限调用

嵌入式 ARM 单片机 驱动 RT操作系统 J2ME LINUX  Symbian C C++ 数据结构 JAVA Oracle 设计模式 软件工程 JSP
2006-04-25 12:36
快速回复:关于拷贝构造函数
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.019758 second(s), 9 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved