- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
第9章 多态性 9-1 多态性概述 9-2 虚函数 9-3 纯虚函数和抽象类 9-4 虚析构函数 9-1 多态性概述 多态就是指不同的对象接收到相同的消息时产生不同的行为,即对应相同的函数名,却执行了不同的函数体。 9-1 多态性概述 1.编译时多态(静态联编) 函数重载的3种方式如下。 (1)外部函数重载:通过参数的个数或参数的类型区别函数。 (2)在同一类中重载:通过参数的个数或参数的类型区别函数。 (3)基类成员函数在派生类中的重载。 9-1 多态性概述 2.运行时多态(动态联编) 动态联编是系统在运行时动态判断对象类型,根据对象实际的类型来动态决定调用哪个对象的函数的机制。 9-2 虚函数 9-2-1 虚函数的声明 9-2-2 使用虚函数 9-2-3 动态联编的实现 9-2 虚函数 9-2-1 虚函数的声明 虚函数是C++中用于实现多态的机制,其核心理念就是通过基类指针访问派生类中定义的函数。虚函数是在基类中冠以关键字virtual的成员函数,其声明的一般格式为: virtual 类型 函数名(参数表); 9-2-1 虚函数的声明 说明: (1)如果某类中的一个成员函数被说明为虚函数,这就意味着该成员函数在派生类中可能有不同的实现。通过基类指针可以访问派生类对象成员函数。 (2)虚函数可以在一个或多个派生类中被重新定义。在派生类中重新定义虚函数时必须有相同的函数原型,包括返回类型、函数名、参数个数及参数类型的顺序必须相同。 9-2-1 虚函数的声明 (3)一旦一个函数在基类中第一次声明时使用了virtual关键字,那么,当派生类重载该成员函数时,无论是否使用了virtual 关键字,该成员函数都将被看作一个虚函数,也就是说,虚函数的重载函数仍是虚函数。 (4)只有类的成员函数才能说明为虚函数。因为虚函数只适用于有继承关系的类对象,所有普通函数不能说明为虚函数。 9-2-1 虚函数的声明 (5)静态成员函数不能声明为虚函数,因为静态成员函数不属于某个对象。 (6)内联函数不能是虚函数。因为内联函数不能在运行时动态确定其位置,即使虚函数在类的内部定义,编译时,也应将其看作是非内联的。 9-2-1 虚函数的声明 (7)析构函数可以是虚函数,但构造函数不能为虚函数。 (8)如果一个成员函数需要在派生类里有不同的表现,那么应该在基类中把此函数定义为虚函数。 (9)一个类的虚函数在它自己的构造函数和析构函数中被调用的时候,它们就变成普通函数了,不“虚”了。 (10)虚函数与重载函数的比较。 9-2-2 使用虚函数 C++规定,必须采用指向基类对象的指针变量或引用基类对象的引用变量调用虚函数才能实现动态联编,若使用对象来调用虚函数则采用静态联编,从而不具备多态性。 9-2-3 动态联编的实现 在C++语言中动态联编是通过使用虚函数表(Virtual Function Table)来实现的。 编译器发现一个类中有被声明为virtual的函数,就会为其生成一个虚函数表,也就是VFTABLE。 9-3 纯虚函数和抽象类 纯虚函数是指被标明为不具体实现的虚成员函数。声明一个函数是纯虚函数,是让C++知道该函数无定义,是为派生类而保留的位置,期待派生类用一个具体的函数来重载该函数。 定义纯虚函数的一般形式为: virtual 返回值类型 函数名(参数表) = 0; 9-3 纯虚函数和抽象类 说明: (1)纯虚函数是一个在基类中说明的虚函数,它在基类中没有定义,要求任何派生类都定义自己的版本。纯虚函数为各派生类提供一个公共界面。 (2)从基类继承来的纯虚函数,在派生类中仍是虚函数。 (3)抽象类只能作为其他类的基类,不能声明抽象类的实例,也不能用抽象类作为参数类型、函数返回值类型或显式转换的类型。但是,可以声明抽象类的指针和引用。 9-3 纯虚函数和抽象类 (4)在从抽象类派生出的新类中,必须重新定义其父类的每个纯虚函数;或者把这些函数继续声明为纯虚函数,这样做派生类也就成为抽象类。 (5)可以由抽象类派生出具体类,但是不能由具体类派生出抽象类。 (6)在抽象类中也可以定义普通成员函数或虚函数,虽然不能为抽象类声明对象,但仍然可以通过派生类对象来调用这些不是纯虚函数的函数。 9-4 虚析构函数 在析构函数前面加上关键字virtual进行说明,称该析构函数为虚析构函数。 析构函数也可以是纯虚的。例如: class A { public: virtual ~A()=0;
您可能关注的文档
最近下载
- 07-维护支柱应知应会.doc VIP
- 考试点专业课:中国矿业大学(徐州)财务管理习题.pdf VIP
- 中国矿业大学《财务管理》2020-2021学年期末试卷.pdf VIP
- 中国矿业大学《财务管理》2021-2022学年第一学期期末试卷.pdf VIP
- 中国矿业大学《国际会计学(英语)》2021-2022学年第一学期期末试卷.doc VIP
- 中国矿业大学《财务管理》2025 - 2026学年第一学期期末试卷.docx VIP
- 高二《直线和圆的方程》易错培优竞赛试题-2024-2025学年高二数学竞赛能力培优练(全国通用)解析版.pdf VIP
- 高二《直线和圆的方程》易错培优竞赛试题-2024-2025学年高二数学竞赛能力培优练(全国通用)原卷版.pdf VIP
- 第六章:维护支柱.pdf VIP
- 缺血性卒中患者椎动脉颅内段钙化:多因素关联与临床洞察.docx
文档评论(0)