深入理解类.PDF

  1. 1、本文档共71页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
8 第 章 深入理解类 在本章,我们将通过理解如何使类对象更像 C++基本类型那样工作,来扩展现有的关 于类的知识。本章学习如下内容: ● 类的析构函数,需要析构函数的情形和原因 ● 如何实现类的析构函数 ● 如何在自由存储器中分配本地 C++类的数据成员,不再需要时如何将它们删除 ● 何时必须编写类的复制构造函数 ● 联合的概念和用法 ● 如何使类对象使用+或*这样的 C++运算符 ● 类模板的概念,定义和使用类模板的方法 ● 如何在 C++/CLI 类中重载运算符 8.1 类的析构函数 虽然本节标题是析构函数,但还与动态内存分配有关。当我们在自由存储器中为类成 员分配内存时,除必须利用构造函数以外,还必须利用析构函数,另外,使用动态分配的 类成员还要求我们自定义复制构造函数,这一点在本章稍后就将看到。 8.1.1 析构函数的概念 析构函数用于销毁不再需要或不再有效的对象。当某个对象不再有效时,程序将自动 调用类的析构函数。销毁对象需要释放该对象的数据成员(那些即使没有类对象存在时也将 继续存在的静态成员除外) 占用的内存。类的析构函数是与类同名的成员函数,只是类名前 需要加个否定号(~) 。类析构函数不返回任何值,也没有定义的形参。就CBox类来说,其 析构函数的原型如下: ~CBox(); // Class destructor prototype 因为析构函数没有任何形参,所以一个类只能有一个析构函数。 注意: 给析构函数指定返回值或形参是错误的。 Visual C++ 2005 入门经典 8.1.2 默认的析构函数 我们迄今使用过的所有对象都是被类的默认析构函数自动销毁的。如果我们不自行定 义析构函数,编译器就总是生成默认的析构函数。默认的析构函数不能删除 new 运算符在 自由存储器中分配的对象或对象成员。如果类成员占用的空间是在构造函数中动态分配的, 我们就必须自定义析构函数,然后显式使用 delete 运算符来释放构造函数使用 new 运算符 分配的内存,就像销毁普通变量一样。我们需要在编写析构函数方面实践一下,因此下面 就来试一试。 试一试:简单的析构函数 为了解何时调用类的析构函数,我们可以在 CBox 类中添加上析构函数。下面是本示 例的代码,其中包括的 CBox 类有一个析构函数: // Ex8_01.cpp // Class with an explicit destructor #include iostream using std::cout; using std::endl; class CBox // Class definition at global scope { public: // Destructor definition ~CBox() { cout Destructor called. endl; } // Constructor definition CBox(double lv = 1.0, double wv = 1.0, double hv = 1.0): m_Length(lv), m_Width(wv), m_Height(hv) { cout endl Constructor called.; } // Function to calculate the volume of a box double Volume() const { return m_Length*

文档评论(0)

jyf123 + 关注
实名认证
内容提供者

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

1亿VIP精品文档

相关文档