- 1、本文档共40页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
* 7.1 多态性概述 7.2 虚函数 7.3 抽象类 7.4 综合实例 第 7章多态与虚函数 一种语言若不支持多态,则不能称之为面向对象的程序设计语言。本章要讨论的多态性与前面我们介绍的继承、封装等一样,都是面向对象程序设计语言中的重要特征。多态性与继承是密不可分的,本章所讲的多态性指在继承类中与基类同名、同参数、同类型函数的不同行为。 一般来说,C++语言支持两种不同类型的多态:编译时多态和运行时多 态。本章讨论的内容主要集中在运行时多态及其实现。 多态就是指不同的对象接受到相同的消息时产生不同的响应动作,即对应 相同的函数名,却执行了不同的函数体(当然,这些函数体还是要事先定义好,以便调用)。 种把程序标示符与和一个存储地址相联系的过程,称为联编(binding,又译为绑定)。 【 7.1 多态性概述】 静态联编:指这种联编在编译阶段完成的,由于联编过 程是在程序运行前完成的,所以又称为早 期联编。静态联编能够实现编译时多态。 动态联编:指这种联编要在程序运行时动态进行,所以 又称为晚期联编。动态联编可以实现运行时 多态。 要实现静态联编,在编译阶段就必须确定标示符(如函数名)和代码之间的对应关系。 重载多态:是函数重载。 强制转换多态:不同类型的数据类型进行 混合运算时要进行的强制 类型转换。 包含多态:指在基类及其派生类族中同名 函数的不同函数实现,及其在 运行时的不同响应。 参数多态:在后面章节中进行探讨。 编译时多态和运行时多态的严格划分 都是通用多态 都是专用多态 【 7.1 多态性概述】 支持两种编译方式 EXAMPLE7_01.H #ifndef EXAMPLE7_01_H #define EXAMPLE7_01_H #include iostream.h class Base //声明基类Base { private: double dblBaseTest; public: Base(double dblInitial=0.0){dblBaseTest=dblInitial;} ~Base(){} void setBase(double dblSet){dblBaseTest=dblSet;} double getBase(){return dblBaseTest;} void display(); //用于显示基类中的私有数据成员 }; 例 7-1 通过基类指针访问派生类对象 【 7.2 虚函数】 class FromBase:public Base //从基类Base以公有派生类FromBase { private: double dblFromTest; public: FromBase(){} FromBase(double dblInitBase,double dblInitFrom):Base(dblInitBase) {dblFromTest=dblInitFrom;} ~FromBase(){} void setFrom(double setFrom){dblFromTest=setFrom;} double getFrom(){return dblFromTest;} void display(); //显示派生类的私有数据成员 }; #endif //类的声明结束 EXAMPLE7_01.CPP //类的实现开始 #include iostream.h #include EXAMPLE6_01.H void Base::display() { 通过基类指针访问派生类对象 例 7-1 cout″Now in Base class, we display its private number:″endl; cout″dblBaseTest :″dblBaseTestendl; } void FromBase::display() { cout″Now in FromBase class, we display its private number:″endl; cout″dblFromTest :″dblFromTestendl; } /
文档评论(0)