C++程序设计 教学课件 作者 郑莉 第4章 _类与对象.pptVIP

C++程序设计 教学课件 作者 郑莉 第4章 _类与对象.ppt

  1. 1、本文档共104页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  5. 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  6. 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  7. 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  8. 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * 4.3. 2对象的构造 读者可以尝试修改一下例题程序,使拷贝构造函数可以构造一个与初始点有一定位移的新点。 4. 3 对象 运行结果 Copy-Constructor called c2.real=0.1 Copy-Constructor called c3.real=0.1 Copy-Constructor called 0.1 Copy-Constructor called c4.real=0.3 * 4.3. 2对象的构造 虽然系统会提供默认拷贝构造函数,但是编写拷贝函数可以对对象进行有选择、有变化地复制,因而更加灵活。 此外,如果类的数据成员中含有指针类型(关于指针请参阅第8章)时,默认拷贝构造函数只能是浅拷贝,而浅拷贝会带来数据安全方面的隐患。要实现安全的拷贝,必须使用深拷贝,这时必须自己编写拷贝构造函数。 4. 3 对象 * 4.3. 3对象析构 析构函数用来释放一个对象。当一个对象结束它的生存期(对生存期的介绍请参阅第6章)时,系统自动调用析构函数来释放该对象。在析构函数调用之后,对象消失了,相应的内存空间也被释放。 4. 3 对象 * 4.3. 3对象析构 析构函数的特点如下: 析构函数是成员函数的一种,其声明在类内部,其定义可以在类内部,也可以在类外部; 析构函数的函数名同类名,但是在函数名前加上“~”号,以表示功能和构造函数相反; 析构函数没有参数,不能重载,且没有返回值; 析构函数在对象生存期即将结束时被系统自动调用; 析构函数可以是虚函数(关于虚函数的介绍请参阅第11章)。 4. 3 对象 * 4.3. 3对象析构 和具有默认构造函数一样,类还具有默认析构函数。默认析构函数是不做任何事情的析构函数。 例如,给Fruit类加入一个不做任何事情的内联析构函数,其作用和默认析构函数相同: 4. 3 对象 class Fruit { public: Fruit(float newVolume,float newWeight); ~Fruit(){} private: float volume; float weight; }; * 4.3. 3对象析构 如果多个对象的生存期一致,则在生存期结束时将需要同时析构。在C++中的析构顺序和构造顺序相反。 例6:构造函数、析构函数的调用,以及析构顺序 4. 3 对象 #include iostream using namespace std; class Fruit { public: Fruit(); Fruit(float newVolume,float newWeight); ~Fruit(); float GetVolume(); * 4.3. 3对象析构 4. 3 对象 private: float volume; float weight; }; Fruit::Fruit(float newVolume,float newWeight) //Fruit的构造函数 { volume = newVolume; weight = newWeight; coutConstructor calledendl; } Fruit::Fruit() //Fruit的默认构造函数 { volume = 0.1; weight = 0.1; coutDefault Construct Function calledendl; } * 4.3. 3对象析构 4. 3 对象 Fruit::~Fruit() //Fruit的析构函数 { coutDestructor called,volume=volumeendl; } float Fruit::GetVolume() { return volume; } int main() { Fruit f1; //创建对象f1,调用默认构造函数创建 Fruit f2(0.3,0.4); //创建对象f2,调用普通构造函书创建 coutf1.volume=f1.GetVolume()endl; coutf2.volume=f2.GetVolume()endl; return 0; } * 4.3. 3对象析构 可见,f1是利用默认构造函数初始化的,f2是利用带参数的构造函数初始化的,析构顺序是和构造顺序恰好相反。 4. 3 对象 运行结果 Default Construct F

文档评论(0)

118压缩包课件库 + 关注
实名认证
文档贡献者

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

1亿VIP精品文档

相关文档