第9章 关于类对象的进一步讨论.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文档。上传文档
查看更多
第9章 关于类和对象的进一步讨论 9.1 构造函数 9.1.1 问题的提出:对象的初始化 以下对数据成员的初始化方法都是错的,为什么? 如果数据成员是公有的,则可以在定义类对象时对其成员进行初始化,如下图所示。 但是根据面向对象程序设计方法信息隐蔽的原则,数据成员是不宜设为public的。 9.1.2 构造函数的作用 什么是构造函数?构造函数是一个特殊的成员函数。 主要目的是用来为数据成员初始化(当然可以在其中放置其他的语句)。 不需要(也不能)显式地调用它,而是在建立对象时自动执行的。 构造函数的名字必须与类名相同(不能由用户任意命名),以便编译系统能识别它并当作构造函数来处理。 不返回任何值,因此也就不具有任何函数类型。 用户需要根据初始化的要求设计构造函数的参数和函数体。 如果用户没有显式地定义构造函数,则C++系统会自动生成一个构造函数(即,第8章的例子里定义的类都隐含了构造函数)。 下列关于构造函数的使用,是否正确,如果错误,又错在哪里? 例9.1 使用构造函数初始化数据成员 什么时候调用构造函数?P265,在类对象进入其(指该类对象)作用域时调用构造函数。 考虑下列程序的输出顺序是怎样的? 9.1.3 带参数的构造函数 采用带参数的构造函数,可以在定义不同的对象时,从外面将不同的数据传递给构造函数,从而使得对象的初始值不同。当然带参数的构造必须由用户显式地声明并定义。 声明带参数的构造函数的格式为: 构造函数名(类型1 形参1, 类型2 形参2, …); 注意:利用带参数的构造函数定义对象的格式为: 类名 对象名(实参1, 实参2, …); 例9.2 有两个长方体,其长宽高分别为:(1)12,20,25; (2)10,14,20。求它们的体积。编写一个基于对象的程序,在类中用带参数的构造函数。 9.1.4 用参数初始化表对数据成员初始化 参数初始化表:在函数的首部的末尾加一个冒号,然后列出参数的初始化表。 以下格式等效: 9.1.5 构造函数的重载 复习:函数的重载 编程时,有些函数实现的功能相似,只是部分细节不同(函数的参数个数不同,参数类型不同等)—这种情况下,可使用“ 函数的重载”。 函数的重载(function overloading) — 一个函数名可以多用:C++允许用同一函数名定义多个函数,这些函数的参数个数或参数类型不同。 函数重载的例子: 参数类型不同 参数个数不同 函数重载使用注意事项: 参数的个数和类型可以都不同。但不能只有函数的类型不同而参数的个数和类型都相同。为什么? 一个函数不能既作为重载函数,又作为有默认参数的函数。为什么? 都是为了避免歧义。 构造函数的重载 重载对构造函数意义重大,因为不能显式地调用构造函数,只能在定义对象时给出参数,由系统调用构造函数。因此如果想为同一类不同的对象初始化不同的值,只能采用重载。 例9.3 在例9.2的基础上,定义两个构造函数,其中一个无参数,一个有参数。 注意: 如果用户没有定义任何构造函数,系统会自动生成一个不带参数、没有任何操作代码的构造函数,这时用类类型定义类对象的方法是:Box box1; 一旦用户显式地定义了带参数的构造函数,而没有定义无参构造函数。那么以下的用法就是错误的: 说明: 默认构造函数(或缺省构造函数):哪个构造函数属于默认构造函数? 不带参数的构造函数是默认构造函数; 如果用户未定义任何构造函数,系统自动提供的构造函数也是默认构造函数。 全部参数指定了默认值的构造函数也是默认构造函数,因为定义对象时可以不指定参数了(9.1.6)。 注意:只能有一个默认构造函数,为什么?。 如果在建立对象时,选用的是无参构造函数,则应正确书写定义对象的语句。如: 尽管在一个类中可以包含多个构造函数,但对每个对象来说,建立对象时只执行其中一个构造函数,并非每个构造函数都执行。 9.1.6 使用默认参数值的构造函数 形参默认值(或称缺省值)的含义:如果用户不指定参数的值,则编译系统就使用形参默认值。 缺省值的现象出现在各种软件中,也出现在实际生活中。 在构造函数里使用缺省参数值跟在普通函数里使用缺省参数值的方法和注意事项大致上差不多。 例9.4 将例9.3程序中的构造函数改用含默认值的参数,长、宽、高的默认值均为10。 在构造函数中使用默认参数注意事项: 应该在什么地方指定构造函数的默认参数?在声明时必须指定,在定义时可以指定,也可以不指定。 在声明构造函数时,形参名可以省略,如: 如果构造函数的全部参数都指定了默认值,则在定义对象时可以给一个或几个实参,也可以不给出实参。由于这类构造函数不需要实参也可以调用构造函数,因此全部参数指定了默认值的构造函数也属于默认构造函数。 一个类只能有一个默认构造函数,否则就可能产生歧义,如同时定义了下面两

文档评论(0)

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

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

1亿VIP精品文档

相关文档