第讲拷贝构造函数.pptVIP

  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文档。上传文档
查看更多
第讲拷贝构造函数

Designed by Ruifang ZHAI 华中农业大学计算机科学与技术系 C++ 程 序 设 计 C++ Programming 翟瑞芳 Email: rfzhai@mail.hzau.edu.cn Office: 逸夫楼B407-1 拷贝构造函数 一、拷贝构造函数 4.3.2 P109 二、浅拷贝与深拷贝 6.5 P226 一、拷贝构造函数 一、拷贝构造函数 拷贝构造函数:具有构造函数的所有特性,形参是本类对象的引用。 使一个已经存在的对象,去初始化一个新对象。 创建新对象A时,若用另一个对象B来初始化,需使用复制(拷贝)构造函数将B的值传给A。 Rect rec1, rec2(2,4,6,2); Rect rec3=rec1, rec4(rec2); 有关拷贝构造函数形参的讨论 ①传值型:Rect(Rect r) ②指针型:Rect(const Rect *r) ③引用型:Rect(const Rect r) 用实参(已经存在的对象)初始化形参(新创建的对象),本身需要拷贝构造函数,形成逻辑上的循环定义。 × 用对象的地址作实参,而非对象作实参。 × 用对象作实参初始化引用型形参,但并不新创建对象。用const限制可保护实参不被函数体修改。 √ 拷贝构造函数的形参为本类对象的引用 一、拷贝构造函数 2°若类中未定义拷贝构造函数,系统会自动生成一个默认拷贝构造函数: 类名(类名 x){ *this=x; } 特性: 1°用拷贝构造函数创建对象时,不会调用其他构造函数。 3°每个类有且仅有一个拷贝构造函数,且不能重载。 一、拷贝构造函数 特性: 4°使用拷贝构造函数创建对象常见的三种场合: (1)创建新对象时 (2)调用函数时 (3)函数返回对象时 在函数设计中,使用引用型形参、引用返回类型,可避免拷贝构造对象。 一、拷贝构造函数 Class Point{ public: Point (int xx=0, int yy=0) { //constructor; x = xx; yy = yy;} Point( Point p); //copy constructor; int getX() { return x; } int getY() { return y; } private: int x, y; }; Point::Point(Point p){ x = p.x; y = p.y; coutp.getX()endl; } 一、拷贝构造函数 (1) 创建新对象时,用一个已存在的对象初始化新对象 int main( ) { Point a(1,2); Point b(a); //用对象a初始化对象b Point c = a; //用对象a初始化对象c coutb.getX()endl; return 0; } 一、拷贝构造函数 调用函数时,用一个已存在的对象作实参初始化值传递的形参 void f(Point p) { coutp.getX()endl;} int main() { Point a(1,2); f(a); //调用时拷贝构造函数被调用; return 0; } 一、拷贝构造函数 (3) 函数返回对象时,用返回的表达式(一个已经存在的对象)初始化值返回时创建的临时对象 Point g( ) { Point a(1,2); return a; //返回函数值时,拷贝构造函数调用 } int main() { Point b; b = g(); return 0; } 一、拷贝构造函数 二、浅拷贝和深拷贝 class Rect { public: Rect() // 构造函数,p指向堆中分配的一空间 { p = new int(100); } ~Rect() // 析构函数,释放动态分配的空间 { coutDestructor!endl; if(p != NULL) { delete p; } } private: int width, height; int *p; // 一指针成员 }; int main() { Rect rect1; Rect rect2(rect1); // 拷贝对

文档评论(0)

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

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

1亿VIP精品文档

相关文档