- 1、本文档共104页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 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
您可能关注的文档
- C#应用开发与实践 教学课件 作者 胡学钢 第20章 课程设计——快递单打印系统.ppt
- C#语言程序设计李继武 彭德林电子教案 第1章.ppt
- C#语言程序设计李继武 彭德林电子教案 第2章.ppt
- C#语言程序设计李继武 彭德林电子教案 第3章.ppt
- C#语言程序设计李继武 彭德林电子教案 第4章.ppt
- C#语言程序设计李继武 彭德林电子教案 第5章.ppt
- C#语言程序设计李继武 彭德林电子教案 第6章.ppt
- C#语言程序设计李继武 彭德林电子教案 第7章.ppt
- C#桌面系统开发案例教程 教学课件 作者 李建青 第八章.ppt
- C#桌面系统开发案例教程 教学课件 作者 李建青 第二章.ppt
- C++程序设计 教学课件 作者 郑莉 第5章_共享与数据保护.ppt
- C++程序设计 教学课件 作者 郑莉 第6章 _全局函数.ppt
- C++程序设计 教学课件 作者 郑莉 第7章_数组与字符串.ppt
- C++程序设计 教学课件 作者 郑莉 第8章_指针.ppt
- C++程序设计 教学课件 作者 郑莉 第9章 _动态内存分配.ppt
- C++程序设计 教学课件 作者 郑莉 第10章_类的重用.ppt
- C++程序设计 教学课件 作者 郑莉 第11章_多态性.ppt
- C++程序设计 教学课件 作者 郑莉 第12章_流类库与输入输出.ppt
- C++程序设计 教学课件 作者 郑莉 第13章_运算符重载.ppt
- C++程序设计 教学课件 作者 郑莉 第14章 _模板.ppt
文档评论(0)