- 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.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;
您可能关注的文档
- C#程序设计案例教程 周庞荣 易斌 第4章 运算符与表达式新.ppt
- C#程序设计案例教程 周庞荣 易斌 第5章 程序控制语句新.ppt
- C#程序设计案例教程 周庞荣 易斌 第7章 函数新.ppt
- C#程序设计案例教程 周庞荣 易斌 第8章 面象对象程序设计基础新.ppt
- C#程序设计案例教程 周庞荣 易斌 第9章 继承新.ppt
- C#程序设计案例教程 周庞荣 易斌 第13章 文件的输入和输出新.ppt
- C#程序设计陈语林 第01章新.ppt
- C#程序设计陈语林 第03章新.ppt
- C#程序设计陈语林 第05章新.ppt
- C#程序设计陈语林 第06章新.ppt
- C++程序设计 冯博琴 C++第10章新.ppt
- C++程序设计 连卫民 何樱 韩彦锋 等 第2章 C++基础知识新.ppt
- C++程序设计 连卫民 何樱 韩彦锋 等 第6章 模块化的程序设计新.ppt
- C++程序设计 连卫民 何樱 韩彦锋 等 第7章 指针与引用的程序设计新.ppt
- C++程序设计 连卫民 何樱 韩彦锋 等 第8章 类与对象的程序设计新.ppt
- C++程序设计 连卫民 何樱 韩彦锋 等 第9章 复杂对象的程序设计新.ppt
- C++程序设计 连卫民 何樱 韩彦锋 等 第10章 类继承的程序设计新.ppt
- C++程序设计 连卫民 何樱 韩彦锋 等 第11章 类多态的程序设计新.ppt
- C++程序设计 连卫民 何樱 韩彦锋 等 第12章 模板的程序设计新.ppt
- C++程序设计 连卫民 何樱 韩彦锋 等 第13章 IO流的程序设计新.ppt
文档评论(0)