第三讲高级编程.ppt

  1. 1、本文档共102页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
高级编程技术 第三讲 从前面的讨论中可以总结出保留字protected的用法如下: (1) 有条件打破封装,使派生类的成员函数能够访问基类的私有成员。 (2) 作为访问控制权限的protected应该出现在基类中而不一定出现在派生类中。 (3) 作为继承方式的protected的特殊之处是可将公有(方法)成员变成保护成员,使它们只能被用于直接派生类定义新的函数成员中,而不能从派生类外直接访问。根本的作用还是在于提醒派生类在修改这些受保护的成员时应注意对其后代可能产生的影响。 不同继承方式下基类成员在派生类中的访问权限 高级编程技术 第三讲 继承方式 基类中的访问权限 派生类中的访问权限 公有继承 public public protected protected private 不可访问 保护继承 public protected protected protected private 不可访问 私有继承 public private protected private private 不可访问 派生类的构造和析构 高级编程技术 第三讲 派生类构造函数 派生类对象的数据结构由基类中继承的数据成员和派生类新定义的数据成员共同组成。在派生类对象中由基类继承的数据成员和成员函数所构成的封装体称为基类子对象,它应该由基类的构造函数进行初始化。 高级编程技术 第三讲 由于构造函数不能被继承,派生类的构造函数除了对派生类新增数据成员进行初始化外,还需要承担为基类子对象初始化的任务,即为基类的构造函数提供参数。 另外,对于含有其它类对象成员的派生类,还要负责为这些对象成员的初始化提供参数,以完成派生类对象的整个初始化工作 高级编程技术 第三讲 派生类可以直接访问基类的保护数据成员,甚至在构造时初始化它们,但是一般不这么做,而是通过基类的接口(函数成员)去访问他们,初始化也是通过基类的构造函数进行的。这样做的好处是,一旦基类的实现有错误,只要不涉及接口,基类的修改就不会影响派生类的操作。类与类之间,以接口作沟通,即使基类与子类也不例外。这正是类能够发挥其生命力的原因所在。 在构造一个子类时,由基类的构造函数完成其基类部分的构造,C++类的继承机制提供了这种支持。 高级编程技术 第三讲 派生类构造函数的定义格式如下: 派生类名:: 派生类名(总参数表):对象成员1(参数表1),..., 对象成员n (参数表n),对象成员n+1(参数表n+1) { 函数体; //派生类新增数据成员的初始化 } 说明:在派生类构造函数的总参数表中,应给出初始化基类子对象、派生类对象成员及派生类新增数据成员所需要的全部参数。在参数表之后,列出需要使用参数进行初始化的基类名,对象成员名及各自的参数表,各项之间使用逗号分隔。 高级编程技术 第三讲 派生类构造函数执行的一般顺序如下: (1) 基类构造函数; (2) 派生类对象成员的构造函数(如果有的话); (3) 派生类构造函数体中的内容。 派生类析构函数 高级编程技术 第三讲 派生类析构函数的功能是在该类对象释放之前进行一些必要的清理工作。由于基类的析构函数也不能被继承,因此派生类需要定义自己的析构函数。派生类析构函数的定义与一般类的析构函数的定义完全相同。只要在函数体中把派生类新增的非对象成员的清理工作做好,系统就会自己调用基类和对象成员的析构函数来对基类子对象和对象成员进行清理。 高级编程技术 第三讲 释放派生类对象时,析构函数的执行顺序是:先执行派生类的析构函数,再执行对象成员类的析构函数(如果派生类有对象成员的话),最后执行基类的析构函数。执行析构函数的顺序与执行构造函数时正好相反。 多 态 性 高级编程技术 第三讲 在程序运行时,能依据参数类型确认调用哪个函数的能力,称为多态性,或称滞后联编。编译时就能确定哪个重载函数被调用的,称为先期联编。 C++允许子类的成员函数重载基类的成员函数。例如,在下面的代码中的基类和派生类中都定义了计算学费的成员函数。 高级编程技术 第三讲 例:先期联编 class Student { public: float calcTuition() {

您可能关注的文档

文档评论(0)

2232文档 + 关注
实名认证
内容提供者

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

1亿VIP精品文档

相关文档