免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 1457 | 回复: 5
打印 上一主题 下一主题

复制构造函数,这个地方不明白 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2009-07-03 23:55 |只看该作者 |倒序浏览
#include <iostream>
using namespace std;
class A
{public:
A(){cout<<"构造函数,创建对象\n";}
A(A&){cout<<"复制构造函数!创建副本!\n";}
~A(){cout<<"执行析构函数!\n";}

};

A func(A one)//返回值是一个类A的对象
{

return one;

}
main()
{
        A a;
        func(a);
}
A(A&){cout<<"复制构造函数!创建副本!\n";}这个A(A&)是什么意思?在main()函数里传递的是a的值,但是a是个对象,哪里来的值呢?如果要是func(&a)这个还是很好理解的,传递的是a对象的首地址,但是a对象值是什么?

论坛徽章:
0
2 [报告]
发表于 2009-07-04 00:15 |只看该作者
1,A(A&)就是拷贝构造函数,传递引用,如:
   A a1;
    A  a2(a1);  //使用a1进行拷贝构造。
2,值传参,你可以把类对象看成是一个结构体就明白了。

论坛徽章:
0
3 [报告]
发表于 2009-07-04 00:23 |只看该作者
A(A&) { ... } // pass the reference of an object of type A as the parameter

A a; // an object is created

func(a); // pass the object created as the parameter

论坛徽章:
0
4 [报告]
发表于 2009-07-04 00:37 |只看该作者
提示: 作者被禁止或删除 内容自动屏蔽

论坛徽章:
0
5 [报告]
发表于 2009-07-04 00:59 |只看该作者
仔细!仔细!
引用!引用!

小心无大错,尤其是在程序设计这个高度要求逻辑性的领域中。

&a 和 a& 这两种写法具有不同的语义。前者表示获得 a 的地址,而后者用在参数声明中,表示传入的是引用,非原对象的一份拷贝。

指针和引用具有本质区别。难以理解?假定你接触过 Unix 文件系统:

如果把指针比作符号链接,那么引用就是硬链接。

----

C++ 的表现力远远大于 C,当然这是要付出代价的,代价就是使用者需要花更多的时间理解,在理解之前还会碰很多的壁。

论坛徽章:
0
6 [报告]
发表于 2009-07-04 12:51 |只看该作者
A(A&){cout<<"复制构造函数!创建副本!\n";}
好像是深拷贝吧
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP