第八章多态性和虚函数.docVIP

  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文档。上传文档
查看更多
WORD格式 可编辑 专业技术 知识共享 第八章 多态性与虚函数 多态性是面向对象程序设计的三大特性之一。多态是指同样的消息被不同类的对象接收时产生不同的行为(操作)。这里的消息主要是指对类的成员函数的调用,而不同的行为是指成员函数的不同实现。 本章主要目标 多态性的概念 虚函数的定义与使用 纯虚函数与抽象类 8.1多态性概念 面向对象方法的多态性可以分为四类:重载多态,强制多态,参数多态和包含多态。 重载多态是指两个以上的函数具有相同的函数名,同名函数却具有不同的功能。C++语言中函数重载和运算符重载就属于重载多态性。比如典型的例子就是运算符重载,利用运算符重载概念,可以实现自定义的类对象之间的运算符操作 强制多态是指对一个对象或变量的类型加以变换,以符合一个函数或某个操作的要求。这种类型变换可以有显式或隐式的两种。C++语言中强制类型转换就是显式类型变量的例子 参数多态是为了使代码具有通用性。通用代码需要不受参数类型的限制,可以自动适应各种数据类型的变化,这就是参数多态的思想。第九章中模板的概念就是支持类型参数化程序设计的工具。 包含多态就是指通过继承的方法构造子类,每一个子类的对象可以使用父类中的属性和服务(或行为)。采用包含多态特性的程序设计方法,可以为每个类指定不同的表现行为,实现的方法就是使用虚函数。 C++语言支持两种多态实现方式,一种是编译时的多态,另一种是运行时的多态。前一种又称为静态联编,后一种称为动态联编。重载多态、强制多态和参数多态就是编译、连接过程中,通过静态联编解决的。而包含多态的操作对象的确定是在程序开始运行之后再来确定,所以是通过动态联编完成的。 在编译阶段还不能确定调用哪个具体的函数,只有程序运行起来后,才能根据实际情况选择调用具体的函数。所以静态多态又称之为前期联编,编译阶段多态;动态多态又称之为后期联编,运行时多态。动态多态是C++语言很重要的一个特征,通过虚函数实现。 通过多态,可以很容易的实现系统的扩展。这在后面的学习中可以很深刻的体会到。 8.2虚函数 8.2.1同名覆盖的概念 覆盖基类的函数成员 覆盖的特点: (1) 覆盖一定出现在具有继承关系的基类和子类之间; (2) 覆盖除了要求函数名完全相同,还要求相应的参数个数和类型也完全相同 ; (3) 当进行函数调用时,子类对象所调用的是子类中定义的函数; (4) 覆盖是C++多态性的部分体现。 例8.1 覆盖举例 class MileDist { protected: float miles; public: void setDist( float d ) { miles = d; } float getDist( ) { return miles; } }; class FeetDist : public MileDist { protected: float feet; public: void setDist(float); float getDist( ) { return feet; } float getMiles( ) { return miles; } }; void FeetDist::setDist(float ft) { feet = ft; // Call base class function MileDist::setDist(feet / 5280); } void main( ) { FeetDist feet; float ft; cout A distance in feet and convert it to miles:; cin ft; feet.setDist(ft); cout feet.getDist( ) feet equals ; cout feet.getMiles( ) miles.\n; } 8.2.2赋值兼容规则 一个公有派生类的对象在使用上可以被当作基类的对象,反之则禁止。具体表现在: 派生类的对象可以被赋值给基类对象。 派生类的对象可以初始化基类的引用。 指向基类的指针也可以指向派生类。 通过基类对象名、指针只能使用从基类继承的成员 例8.2赋值兼容性举例 #include iostream.h class b0 {int nv0; public: b0(int n) {nv0=n;} //virtual void fun(){coutnv0=nv0endl;} }; class b1: public b0

文档评论(0)

zxiangd + 关注
实名认证
文档贡献者

本人从事教育还有多年,在这和大家互相交流学习

1亿VIP精品文档

相关文档