拷贝构造函数对象数组动态创建删除.pptVIP

拷贝构造函数对象数组动态创建删除.ppt

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
3.8 对象的赋值和复制 3.8.1 对象的赋值 对象之间的赋值也是通过赋值运算符“=”进行的。 其功能是将一个对象的成员值一一复制给另一对象的对应成员。 格式为: 对象名1 = 对象名2; 注意:对象名1和对象名2必须属于同一个类。 例如 Student stud1, stud2; //定义两个同类的对象 ┆ stud2 = stud1; //将stud1赋给stud2 说明: (1) 对象的赋值只对其中的数据成员赋值,而不对成员函数赋值。 (2) 类的数据成员中不能包括动态分配的数据,否则在赋值时可能出现严重后果。 3.8.2 对象的复制(复制构造函数或拷贝构造函数) 用一个已有的对象复制出一个完全相同的新对象。 如: Box box2(box1); 作用:用已有的对象box1克隆出一个新对象box2。 一般形式为: 类名 对象2(对象1); 用对象1复制出对象2。 对象复制时,将调用一个特殊的构造函数——复制构造函数。 class 类名 {public: 类名(形参); //构造函数 类名(类名 对象名); //复制构造函数 …… }; 普通构造函数和复制构造函数的区别: 1、形式上的区别: 类名(形式参数);//普通构造函数声明,如Box(int,int,int); 类名(类名 对象名);//复制构造函数,如Box(Box b); 以下3种情况,会调用复制构造函数: (1)、当用类的一个对象去初始化该类的另一个对象时,系统自动调用复制构造函数。 int main( ) { Box box1(10,10,10); Box box2(box1); //复制构造函数被调用 Box box3 = box1; //复制构造函数被调用 return 0; } (2)、当函数参数为类对象时。在调用函数时将实参对象完整地传递给形参,即按实参复制一个形参,系统自动调用复制构造函数。 void func(Box box2) { coutbox2.volume()endl; } int main( ) { Box box1(10,10,10); func(box1); //自动调用复制构造函数 return 0; } 3、函数的返回值是类的对象。在函数调用完毕将返回值带回函数调用处时。此时需要将函数中的对象复制一个临时对象并传给该函数的调用处。 Box f( ) //函数f的类型为Box类类型 { Box box1(12,15,18); return box1; //返回值是Box类的对象 } int main( ) { Box box2; //定义Box类的对象box2 box2=box1; } 注意: 如果程序员没有为类声明复制构造函数,则编译器自动生成一个复制构造函数。 该复制构造函数功能:将作为初始值的对象每个数据成员的值,初始化将要建立的对象的对应数据成员。 3.4 对象数组 例:一个班有50个学生,每个学生的属性包括学号、年龄、成绩等。 可定义一个“学生类”对象数组,每一个数组元素是一个“学生类”对象。 例如 : Student stud[50]; //假设已声明了Student类,定义stud数组,有50个元素 对象数组的初始化: 1、如果构造函数只有一个参数,在定义数组时可以直接在等号后面的花括号内提供实参。如 Student stud[3] = {101, 102, 103}; //合法,3个实参分别传递给3个数组元素的构造函数 2、如果构造函数有多个参数,在定义对象数组时,必须在花括号中分别写出构造函数并指定实参。 例如:构造函数有3个参数,分别代表学号、年龄、成绩。按以下方式定义并初始化对象数组: Student Stud[3]={ //定义对象数组 Student(1001,18,87), //调用第1个元素的构造函数 Student(1002,19,76), //调用第2个元素的构造函数 Student(1003,18,72) //调用第3个元素的构造函数 }; 3.5 对象指针 3.5.1 指向对象的指针 在建立对象时,编译系统会为每一个对象分配一定的存储空间,以存放其成员。对象空间的起始地址就是对象的指针。可以定义一个指针变量,用来存放对象的指针。 3.5.3 this 指针 this指针是隐式使用的。 return(height * width * length); this指针也可以显式使用。 retu

文档评论(0)

lyxbb + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档