第五章 类初始化和清除.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文档。上传文档
查看更多
第五章 类初始化和清除

《面向对象程序设计》 中国科学技术大学计算机系 马建辉 第五章 类:初始化和清除 面向对象程序设计(C++) 5.3 初始化和清除 构造函数 析构函数 何时被调用 默认构造函数与重载构造函数 5.3.1 安全性要求 5.3.2 构造函数 5.3.2.1 构造函数:确保初始化 说明 说明(续) 5.3.3 析构函数 5.3.3.1 析构函数:确保清除 5.3.4 何时被执行? 5.3.4.1 何时被执行? 5.3.5 完整的类 5.3.5.1 完整的类 5.3.6 默认的构造函数 5.3.6 默认的构造函数(续) 5.3.7 显式调用析构函数 小结 作业: 不带任何参数的构造函数。 class Y{ … ; } Y objy; // OK, Why? 如果没有提供任何构造函数,编译器会创建一个默认的构造函数,但这个函数所实现的功能很少是我们所期望的。因此,应明确定义默认构造函数。 class Y{ Y(int sz){…} … ; } Y objy; // error,参数类型不匹配 如果定义了构造函数,但没有无参构造函数, 则创建对象时,若不带参数,将会出错。 如果只想执行析构函数中的执行的操作,而不释放对象的空间,则可以显式调用析构函数。 //执行系统的析构函数,不释放对象的空间。 pb-~String(); * * * * * * * * * * * * 正确地初始化和清除对象是保证程序安全性的关 键问题! int main() { Stash intStash; intStash.initialize(sizeof(int)); //初始化 for(int i = 0; i 100; i++){ intStash.add(i); } ……; intStash.cleanup(); // 清除 } 类的特殊成员函数,编译器在创建对象时自动调用 该函数。通常做一些初始化动作。以保证同一个 类的对象具有一致性。 构造函数跟类同名,可以带参数,没有返回值。 跟别的成员函数没有名字冲突; 编译器总能知道调用哪一个函数; 例:带构造函数的Stash class Stash { int size; // Size of each space …; public: Stash(int size); // 构造函数,跟类同名,无返回值 int add(void* element); …; void cleanup(); }; Stash::Stash(int sz) { size = sz; quantity = 0; storage = 0; next = 0; } 自动初始化Stash对象 int main() { //创建对象时自动调用构造函数 Stash intStash1(2), intStash2(2); for(int i = 0; i 100; i++){ intStash1.add(i); } ……; intStash1.cleanup(); // 清除 } 构造函数的名字必须与类的名字相同; 构造函数不允许指明返回类型,也不允许返回一个 值; 构造函数应声明为public(但不是必须),否则无 法创建对象。 class Stash{ private: Stash(int sz){…}; … }; void main(){ Stash s(10); // Error! can‘t access private member } 可以重载构造函数; class Stash{ public: Stash() {size = 1; …; } Stash(int sz){…} … }; void main(){ Stash charStash; Stash intStash(2); Stash intStash(10, 2);

文档评论(0)

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

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

1亿VIP精品文档

相关文档