-堆与拷贝构造函数分析.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文档。上传文档
查看更多
5.7 临时对象、无名对象和类型转换 * P324例子 5.7 临时对象、无名对象和类型转换 * 5.7 临时对象、无名对象和类型转换 * * class A{ float x,y; public: A(float a,float b) {x=a;y=b;cout调用构造函数\n;} ~A() { cout调用析构函数\n;} void Print(void) { coutx\tyendl; } }; void main(void) { A a1(1.0, 10.0); a1.Print(); a1=A(3.0 , 30.0); a1.Print(); cout退出主函数\n; } 调用构造函数 产生无名对象,初始化并赋值后立即释放 1 10 调用构造函数 调用析构函数 3 30 退出主函数 调用析构函数 用无名对象为已存在的对象赋值,无名对象赋值后会析构。 5.7 临时对象、无名对象和类型转换 * 5.7 临时对象、无名对象和类型转换 * * 实现类型转换的构造函数 同类型的对象可以相互赋值,相当于类中的数据成员相互赋值; 如果直接将数据赋给对象,所赋入的数据需要强制类型转换,这种转换需要调用构造函数。 * 注意:当构造函数只有一个参数时,可以用= 强制赋值。 class B{ float x; public: B(float a) {x=a; cout调用构造函数\n;} ~B() { cout调用析构函数\n;} void Print(void) { coutxendl; } }; void main(void) {B b1(1.0) ; b1.Print(); B b2=100; b2.Print(); b1=10; b1.Print(); cout退出主函数\n; } 调用构造函数 单参数可以这样赋值 1 调用构造函数 100 调用构造函数 调用析构函数 10 退出主函数 调用析构函数 调用析构函数 b1=B(10) 产生一个临时对象 第五章 堆与拷贝构造函数 class example { public: int num; public: ~example(){ coutDestroyingnumendl; }; example(int n) { num=n; coutInitialingnumendl; }; void print(){ coutnumendl; }; }; void main() { example X(0); X=5; X.print(); X=example(10); X.print(); } Initialing 0 Initialing 5 Destroying 5 5 Initialing 10 Destroying 10 10 Destroying 10 * 5.7 临时对象、无名对象和类型转换 * * * * * 析构顺序:r,q,返回值 * * * * 1. example x(0); 处调用构造函数一次初始化x; 2.先构造临时对象X_TMP(5);然后将X_TMP按位拷贝给X,然后临时对象X_TMP析构 3.x=example(10); 处显式调用构造函数example(10)一次,初始化一个无名对象 如果一个类的构造函数只接收一个实参(argument),那么就定义了一个从形参(parameter)数据类型到类的类型的隐式转换。 赋值给x。 * 面向对象程序设计(C++) Oriented Object Programming (C++) * 第五章 堆与拷贝构造函数 学习本章后,应掌握new和delete两个操作符的使用,并能把握从堆中分配和释放对象以及对象数组的时机;领会拷贝构造函数的实质,区别浅拷贝和深拷贝,在程序中适当的运用拷贝构造函数。 * 第五章 堆与拷贝构造函数 5.1 关于堆 C++的内存格局通常分为四个区:代码区、全局数据、栈区、堆区。 全局变量、静态数据、常量存放在全局数据区,所有类成员函数和非成员函数代码存放在代码区,为运行函数而分配的局部变量、函数参数、返回地址等存放在栈区,余下的空间都被作为堆区。 * 第五章 堆与拷贝构造函数 5.2 需要new和delete的原因 使用new和delete比malloc()和free()简单,不用头文件声明。 从程序设计的需要来看,在分配内存申请的时候,总是知道分配的空间派什么用,而且分配空间大小总是某个数据类型(包

文档评论(0)

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

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

1亿VIP精品文档

相关文档