- 1、本文档共58页,可阅读全部内容。
- 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
《皮德常c程序设计教程》chapter-10
第 10 章 继承、多态和虚函数 皮德常 南京航空航天大学 计算机科学与技术学院 10.1 继承 继承是OOP程序设计中很重要的一个方面。继承易于扩充现有类以满足新的应用。将已有的类称之为父类,也称基类,将新产生的类称为子类,也称为导出类或派生类。 导出类不做任何改变地继承了基类中的所有变量和函数(构造函数和析构函数除外),并且还可以增加新的数据成员和函数,从而使导出类比基类更为特殊化。 Example: 例 10-1. 10.2 保护成员和类的访问 基类中的保护成员和私有成员比较类似,唯一的区别是:子类不可访问基类中的私有成员,但可访问基类中的保护成员。 在公有继承或保护继承的情况下,子类能访问基类的protected成员。 Example: 例 10-2 注意 如果省略了继承修饰符,那么就是私有继承: class Test : Grade 不要将继承修饰符与成员的访问修饰符相混淆:成员访问修饰符是规定类外语句能否访问类中的成员,而继承修饰符是为了限定基类成员在子类中的表现。 10.3 构造函数和析构函数 当基类和子类都有构造函数时,如果定义一个子类对象,那么首先要调用基类的构造函数,然后再调用子类的构造函数; 析构函数的调用次序与此相反,即先调用子类的析构函数,然后再调用基类的析构函数。 Example: 例 10-3. 10.3.2 向基类的构造函数传参数 如果基类和子类都有缺省的构造函数,它们的调用是自动完成的,这是一种隐式调用。 如果基类的构造函数带有参数,那么必须让子类的构造函数显式调用基类的构造函数,并且向基类构造函数传递适当的参数。 例 10-4 Note 如果基类没有缺省的构造函数,那么子类必须至少具有一个带参的构造函数,以便向基类构造函数传递参数。 10.3.3 初始化列表的作用 1. 如果类之间具有继承关系,子类必须在其初始化列表中调用基类的构造函数。例: 10.3.3 初始化列表的作用 2. 类中的const常量只能在初始化列表中进行初始化,而不能在函数体内用赋值的方式来初始化。 10.3.3 初始化列表的作用 3. 对象类型的成员的初始化放在初始化列表中,则效率较高,反之较低。基本类型变量的初始化可以在初始化列表中,也可在构造函数中,效率上没区别。 10.4 覆盖基类的函数成员 重载的特点: (1) 重载表现为有多个函数,它们的名字相同,但参数 不全相同; (2) 重载可以出现在同一个类中,也可出现在具有继承关系的父类与子类中; (3) 重载也可表现为外部函数的形式。 10.4 覆盖基类的函数成员 覆盖的特点: (1) 覆盖一定出现在具有继承关系的基类和子类之间; (2) 覆盖除了要求函数名完全相同,还要求相应的参数个数和类型也完全相同 ; (3) 当进行函数调用时,子类对象所调用的是子类中定义的函数; (4) 覆盖是C++多态性的部分体现。 10.5 虚函数 函数覆盖体现了一定的多态性。但是,简单的函数覆盖并不能称为真正的多态性。 Example: 例 10-7 10.6 纯虚函数和抽象类 纯虚函数是在基类中声明的虚函数,没有函数体,要求继承基类的子类必须覆盖它。 带有纯虚函数的类称为抽象类,不能定义抽象类的对象。 派生类可以根据自己的需要,分别覆盖它,从而实现真正意义上的多态性。 格式: virtual void showInfo( ) = 0; 关于抽象类和纯虚函数小节 如果一个类包含有纯虚函数,那么它就是抽象类,必须让其它类继承; 基类中的纯虚函数没有代码; 不能定义抽象类的对象,即抽象基类不能实例化; 必须在子类中覆盖基类中的纯虚函数。 10.6.3 指向基类的指针 指向基类对象的指针可以指向其子类的对象; 如果子类覆盖了基类中的成员,但通过基类指针所访问的成员仍是基类的成员,而不是子类成员。 Example: 例 10-10 10.7 多重继承 10.8 多继承 如果一个子类具有两个或多个直接父类,那么就称为多继承。 10.9 类模板 类模板用于创建类属类和抽象数据类型,从而使程序员可以创建一般形式的类,而不必编写处理不同数据类型的类。 类模板的定义和实现必须在同一个文件中,通常是头文件。编译器看到模板实现时才展开模板。 Example: Program 10-13. 作业 2、3、6、7、9 class FeetDist : public MileDist { protected: float feet; public: void setDist( float ); float getDist(
您可能关注的文档
- “语文”及“语文课程”的理解.pptx
- 上海振华重工(集团)股份有限公司15年度第一期短期融资券法律意见书.pdf
- 上海振华重工(集团)股份有限公司15年度主体长期信用评级报告.pdf
- ★★小学科学探究式教学中若干问题的探讨--国培讲稿.ppt
- 上海中冶横天智能科技股份有限公司 公开转让的补充法律意见书.pdf
- 《11呼唤环保小招贴课件》小学美术岭南社2011课标版五年级上册课件3663.ppt
- 《android应用程序开发》第3章 android程序框架.pptx
- 上海紫灿实业股份有限公司 申请公司股票在全国中小企业股份转让系统 挂牌并公开转让的 法律意见书.pdf
- 《android项目开发实训》项目总结报告新.doc
- 《c++面向对象程序设计》_第一章1.ppt
- 清华五道口:全国城市新市民数字金融服务指数报告(2024).pdf
- 解数第258期:认养一头牛-双寡格局下,新品牌如何实现弯道超车.pdf
- 复旦大学(张奇):2024年大语言模型的能力边界与发展思考报告.pdf
- 天津大学:2024年大模型轻量化技术研究报告.pdf
- 运动鞋代工:体育产业政策扶持叠加海外补库预期升温,中国运动鞋代工行业景气度有望持续提升.pdf
- 复旦大学(张奇):2023年大规模语言模型中语言与知识报告.pdf
- 2024年诺奖得主对ESG的研究与企业ESG的内在逻辑研究报告.pdf
- 奋迅·贝克麦坚时:粤港澳大湾区法律与合规实务指南(2024版).pdf
- 2024年溯及既往的规则-新公司法时间效力司法解释研究报告.pdf
- 2024年洞悉心声,引领潮流-文创产业发展中的消费者洞察报告.pdf
文档评论(0)