C++程序设计 冯博琴 C++第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.2 虚函数 9.2.1 虚函数的定义 虚函数在基类中进行定义,某个成员函数被声明为虚函数后,这个虚函数就可以在派生类中重新定义,在派生类中可能有不同的实现。 定义虚函数的格式: virtual 函数类型 函数名(形参表) { 函数体 } 【例9-1】使用指针变量访问虚函数 #include iostream using namespace std; class A { public: virtual void fun() { coutBase A endl; } }; 【例9-1】(续) class B1:public A { public: void fun( ) { coutDerived B1 endl; } }; class B2:public A { public: void fun( ) { coutDerived B2 endl; } }; 【例9-1】(续) void main() { A a1,*p; B1 b1; B2 b2; p=a1; p-fun(); p=b1; p-fun(); p=b2; p-fun(); } 在一个派生类中重新定义基类的虚函数是函数重载的一种特殊形式,重载虚函数时,要求派生类中重载的函数其原型即函数名、返回类型、参数类型、参数个数及顺序与基类中函数的原型完全相同。 9.2.2 多继承中的虚函数 【例9-2】在多继承中使用虚函数。 #include iostream using namespace std; class A1 { public: virtual void fun() // 函数fun()为虚函数 { coutBase A1 endl; } }; 【例9-2】(续) class A2 { public: void fun() // 函数fun()为一般函数 { coutBase A2 endl; } }; class B:public A1, public A2 { public: void fun() { coutDerived B endl; } }; 【例9-2】(续) void main() { A1 a1,*p1; A2 a2,*p2; B b; p1=a1; p1-fun(); p1=b; p1-fun(); p2=a2; p2-fun(); p2=b; p2-fun(); } 9.2.3 虚函数的传递性 多层继承中,在基类中定义了虚函数,则在其派生类中可以重新定义虚函数,如果这个派生类再派生新的类,则在新的派生类多中仍然可以重新定义虚函数,因此,虚函数的特性是可以传递的。 【例9-3】多层继承中虚函数的传递性 #include iostream using namespace std; class A { public: virtual void fun() // 函数fun()为虚函数 { coutClass A endl; } }; 【例9-3】(续) class B:public A { public: void fun() // 函数fun()也为虚函数 { coutClass B endl; } }; class C:public B { public: void fun() // 函数fun()也为虚函数 { coutClass C endl; } }; 【例9-3】(续) void main() { A a,*p; B b,*p1; C c; cout使用指针变量pendl; p=a; p-fun(); p=b; p-fun(); p=c; p-fun(); cout使用指针变量p1endl;

文档评论(0)

开心农场 + 关注
实名认证
文档贡献者

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

1亿VIP精品文档

相关文档