C课件 类与对象拷贝构造

上传人:我*** 文档编号:144468670 上传时间:2020-09-09 格式:PPT 页数:19 大小:120.50KB
返回 下载 相关 举报
C课件 类与对象拷贝构造_第1页
第1页 / 共19页
C课件 类与对象拷贝构造_第2页
第2页 / 共19页
C课件 类与对象拷贝构造_第3页
第3页 / 共19页
C课件 类与对象拷贝构造_第4页
第4页 / 共19页
C课件 类与对象拷贝构造_第5页
第5页 / 共19页
点击查看更多>>
资源描述

《C课件 类与对象拷贝构造》由会员分享,可在线阅读,更多相关《C课件 类与对象拷贝构造(19页珍藏版)》请在金锄头文库上搜索。

1、对象的赋值和复制,对象的赋值和复制,对象的赋值 同一类的两个对象可以相互赋值,即不同对象的成员分别复制。通过 运算符的重载实现。 对象1 对象2; 注意: 对象的赋值只对其中的数据成员赋值,而不复制成员函数。 类的数据成员中不能包括动态分配的数据!,Box box1(12 ,13,14), box2; box2 = box1;,复制构造函数用一个已有同类对象的数据 对正在建立的对象进行数据初始化. C+为类提供默认版本的复制构造函数 程序员可以定义用户版本的拷贝构造函数,对象的赋值和复制,语法形式 类名 : 类名( const 类名 Box box2 = box1;,默认拷贝构造函数,clas

2、s Atype private: int a; public: Set(int i) a = i ; Print() couta; ;,void main() Atype x; x.Set(10); Atype y=x; /Atype y(x); y.Print(); ,应用默认拷贝构造函数的两种格式,将x对象中的数据成员的值赋给 新定义的对象y中的对应的数据成员。,class A public : A ( int ) ; A ( const A ,拷贝构造函数,/ 拷贝构造函数,/ 创建对象 a,调用 A (int),/创建对象 b,调用 A (const A A c = b ;,调用拷贝构

3、造函数的两种典型方法,默认拷贝构造函数,对于类来说,拷贝构造函数是必须的; 没有定义,则生成默认的拷贝构造函数内置在类中; 默认拷贝构造函数是单参数的,而且参数是同属一类的对象; 默认拷贝构造函数可以被重载.,拷贝构造函数,A a; A b=a; /调用拷贝构造函数 A c(a); /调用拷贝构造函数 自定义拷贝构造函数 拷贝构造函数的参数必须为引用参数,拷贝构造函数的执行,用已有对象初始化创建对象。 当对象作函数参数时,因为要用实参初始化形参,也要调用拷贝构造函数。 对象引用调用 -不会调用构造函数和析构函数。 函数返回对象 返回一个临时对象,调用一次临时对象的拷贝构造函数 赋值不调用拷贝构

4、造函数,class Box public : Box( ); Box(const Box,调用拷贝构造函数的时机,Box:Box(const Box ,void main() Box shoesBox; Box b1 = shoesBox; Box b2(b1); ,代码模拟,class Box public : Box( ); Box(const Box,调用拷贝构造函数的时机,void test (Box b) cout“ test fuction: endl; void main() Box b; b.set( 1, 2 ,3) ; test ( b ) ; ,/ 调用复制构造函数,一个

5、带 类参数的函数,默认拷贝构造函数可以完成对象的数据成员值 简单的复制; 对象的数据成员是由指针指示的堆时, 默认复制构造函数仅作指针值复制, 需显式定义复制构造函数。,拷贝构造函数,/一个有问题的程序 #include #include class name public : name(char *pn) ; name( ) ; private: char *pname ; int size ; /包含字符的数目 ;,浅复制和深复制,代码练习,程序探讨,浅复制和深复制,name : name(char *pn) cout Constructing pn endl ; pname = new

6、charstrlen(pn)+1 ; if (pname!=0) strcpy(pname,pn) ; size = strlen(pn) ; name : name() cout Destructing pname endl ; pname0 = 0 ; delete pname ; size = 0 ; ,/一个有问题的程序 #include #include class name public : name(char *pn) ; name() ; private : char *pname ; int size ; ;,浅拷贝和深拷贝,void main() name Obj1(No

7、Name) ; name Obj2 = Obj1 ; ,调用默认版本 复制构造函数,错误 内存已经释放,/修改程序 #include #include class name public : name(char *pn) ; name(name Obj ,浅拷贝和深拷贝,name:name(name Obj ,定义拷贝构造函数,void main() name Obj1(NoName) ; name Obj2 = Obj1 ; ,/修改程序 #include #include class name public : name(char *pn) ; name(name Obj ,浅拷贝和深拷贝

8、,void main() name Obj1(NoName) ; name Obj2 = Obj1 ; ,7,Obj2.pname,Obj2.size,N o N a m e 0,总结:拷贝构造函数,默认拷贝构造函数可以完成对象的数据成员值 简单的复制; 自定义拷贝构造函数可以实现与默认拷贝构造函数不同的功能。 拷贝构造函数只适用于初始化: 一个对象需要通过另一个对象进行初始化。 一个对象以值传递的方式传入函数体。 一个对象以值传递的方式从函数返回。,调用时机,作用,课后作业,1.设A为test类的对象且赋有初值,则语句test B=A;表示( )A. 语法错误 B. 为对象A定义一个别名C. 将对象A复制给对象B D. 仅说明B和A属于同一个类 2. 假定AB为一个类,则该类的拷贝构造函数的声明语句为 。 A AB ”语句时,系统自动调用该类的构造函数的次数为 。,课后作业,5、实验讲义 实验二(5)(6)思考题(3),

展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 办公文档 > PPT模板库 > PPT素材/模板

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号