c+课件:C++对C的扩充,喜欢就免费下载,数据共享和流通.pptVIP

c+课件:C++对C的扩充,喜欢就免费下载,数据共享和流通.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文档。上传文档
查看更多
数据共享和流通 主讲人:王丽辉 2004-08-02 课程概要 拷贝构造函数 只读成员函数 友元 静态成员 拷贝构造函数 可用一个对象去构造另一个对象,或者说,用一个对象的值初始化一个新构造的对象,如: Student s1(“Jenny”); Student s2 = s1; //用s1的值去初始化s2 对象作为函数参数传递时,也要涉及对象的拷贝, 如: void fn(Student fs){…} void main() { Student ms; fn(ms); } 拷贝构造函数 函数fn()的参数传递的方式是传值,参数类型是Student,调用时,实参ms传给了形参fs,ms在传递的过程中是不会改变的,形参fs是ms的一个拷贝。这一切是在调用的开始完成的,也就是说,形参fs用ms的值进行构造。 这时候,调用构造函数Student(char*)就不合适,新的构造函数的参数应是Student,也就是Student(Student s); 拷贝构造函数 为什么C++要用上面的拷贝构造函数,而它自己不会做像下面的事呢? int a = 5;int b = a; //用a的值拷贝给新创建的b 因为对象的类型多种多样,不像基本数据类型这么简单,有些对象还申请了系统资源,如下图: 拷贝构造函数 s对象拥有了一个资源,用s的值创建一个t对象,如果仅仅只是二进制内存空间上的s拷贝,那意味着t也拥有这个资源。由于资源归属权不清,将引起资源管理的混乱 拷贝构造函数 一种特殊的成员函数,它的功能是用一个已知的对象来初始化一个被创建的同类的对象。 也是构造函数,它是在初始化时被调用来将一个已知对象的数据成员的值复制给正在创建的另一个同类的对象。 拷贝构造函数的特点 函数名与类名相同,并不指定返回值。 只有一个参数,并且是某个对象的引用。 每个类都必须有一个拷贝构造函数,其格式如下 类名::拷贝构造函数名(const类名引用名) 其中,拷贝构造函数名是与该类名相同的。Const是一个类型修饰符,被它修饰的对象是一个不能被更新的常量。 默认拷贝构造函数 类定义中,如果没有提供自己的拷贝构造函数,则c++提供一个默认拷贝构造函数, 就像没有定义构造函数,c++提供默认构造函数一样。 C++提供的默认拷贝构造函数工作的方法是,完成一个成员一个成员的拷贝。如果成员是类对象,则调用其拷贝构造函数或者默认拷贝构造函数 拷贝构造函数的调用 用于既有对象初始化一个新对象是 声明并初始化对象变量时; 对象作为函数参数时; 对象作为函数值返回时; 例 #include iostream.h #include string.h class student { public: Student(char* pName = No name, int ssId = 0) { id = ssId; strcpy(name, pName); cout Constructing new student pName endl; } Student(student s) // 拷贝构造函数 { cout Constructing copy of s.name endl; strcpy(name, copy of); strcat(name, s.name); id = s.id; } 例 ~Student() { cout Destructing name endl; } protected: char name[40]; int id; }; void fn(Student s) { cout In function fn()\n; } 例 void main() { Student randy(Randy, 1234); cout Calling fn() endl; fn(randy); cout Returned from fn() endl; } Constructing new student Randy Calling fn() Constructing copy of Randy In function fn() Destructing copy of Randy Returned from fn() Destructing Randy 浅拷贝和深拷贝 存在两种形式的类。 一种形式的类中仅存在变量或对象,不具备指 针成员。缺省的拷贝构造函数和赋值运算符函数是 浅拷贝的方式,该方式通过memcpy函数将源实例 的数据复制给目标实例占住的一片内存空间

文档评论(0)

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

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

1亿VIP精品文档

相关文档