拷贝构造函数.docx

拷贝构造函数.docx

ID:63035807

大小:52.93 KB

页数:11页

时间:2021-08-05

拷贝构造函数.docx_第1页
拷贝构造函数.docx_第2页
拷贝构造函数.docx_第3页
拷贝构造函数.docx_第4页
拷贝构造函数.docx_第5页
资源描述:

《拷贝构造函数.docx》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库

1、拷贝构造函数一.什么是拷贝构造函数首先对于普通类型的对象来说,它们之间的复制是很简单的,例如:inta=100;mtb=a;而类对象与普通对象不同,类对象内部结构一般较为复杂,存在各种成员变量。下面看一个类对象拷贝的简单例子。#iiicludeusingnamespacestd;classCExample{private:hita;public:〃构造函数CExaniple(iiitb){a=b;}〃一般函数voidShow()(cout«a«endl;}};mtmam()(CExanipleA(100);CExampleB=A;〃注意这里的对象初始化要调用

2、拷贝构造函数,而非赋值B.Show();return0;}运行程序,屏幕输出100。从以上代码的运行结果可以看出,系统为对象B分配了内存并完成了与对象A的复制过程。就类对象而言,相同类型的类对象是通过拷贝构造函数来完成整个复制过程的。下面举例说明拷贝构造函数的工作过程。#iiicludeusingnamespacestd;classCExample{private:mta;public:〃构造函数CExaniple(mtb){a=b;}〃拷贝构造函数CExaniple(constCExainple&C)(a=C.a;)〃一般函数voidShow()cout«

3、a«endl;);mtmam()CExanipleA(100);CExanipleB=A;〃CExampleB(A);也是一样的B.Show();return0;)CExample(constCExample&C)就是我们自定义的拷贝构造函数。可见,拷贝构造函数是一种特殊的构造函数,函数的名称必须和类名称一致,它必须的一个参数是本类型的一个引用变量。二.拷贝构造函数的调用时机在C++中,下面三种对象需要调用拷贝构造函数!1.对象以值传递的方式传入函数参数classCExample(private:mta;public:〃构造函数CExample(mtb)a=b;cout«ncre

4、at:H«a«endl;)〃拷贝构造CExample(constCExample&C){a=C.a;cout«ncopyH<

5、调用拷贝构造函数把test的值给C。整个这两个步骤有点像:CExampleC(test);(3).等g_Fun()执行完后,析构掉C对象。2.对象以值传递的方式从函数返classCExampleprivate:mta;public:〃构造函数CExample(iiitb)(a=b;)〃拷贝构造CExample(constCExample&C)(a=C.a;cout«HcopyH«endl;)voidShow(J(cout«a«endl;)};〃全局函数CExampleg__Fun()(CExampletemp(O);returntemp:}hitmam()(g-Fun();ret

6、urn0;}当g_Fun()函数执行到return时,会产生以下几个重要步骤:(1).先会产生一个临时变量,就叫XXXX吧。(2).然后调用拷贝构造函数把temp的值给XXXXo整个这两个步骤有点像:CExampleXXXX(temp);(3).在函数执行到最后先析构temp局部变量。(4).等g_Fun()执行完后再析构掉XXXX对象。3.对象需要通过另外一个对象进行初始化CExampleA(100);CExampleB=A;//CExampleB(A);后两句都会调用拷贝构造函数。三.浅拷贝和深拷贝1.默认拷贝构造函数很多时候在我们都不知道拷贝构造函数的情况下,传递对象给函数

7、参数或者函数返回对象都能很好的进行,这是因为编译器会给我们自动产生一个拷贝构造函数,这就是“默认拷贝构造函数”,这个构造函数很简单,仅仅使用“老对象”的数据成员的值对“新对象”的数据成员一一进行赋值,它一般具有以下形式:Rect::Rect(constRect&r)(width=r.widtli;height=r.height;}当然,以上代码不用我们编写,编译器会为我们自动生成。但是如果认为这样就可以解决对象的复制问题,那就错了,让我们来考虑以下一段代码:classRect(p

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。