C++09 多态.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文档。上传文档
查看更多
C09多态

C++ 多 态 姜义平 * jyp2006@163.com 概述 所谓多态性就是不同对象收到相同的消息时,产生不同的动作。 直观地说,多态性是指用一个名字定义不同的函数,这些函数执行不同但又类似的操作,从而可以使用相同的调用方式来调用这些具有不同功能的同名函数,从而实现“一个接口,多种方法”。 为什么要有多态? 增加了灵活性,提高了可重用性和可扩充性 如:图形的求面积 多态的实现 多态从实现的角度来讲可以划分为两类:编译时的多态和运行时的多态。 编译时的多态是通过静态联编(又前期联编)来实现的。静态联编就是在编译阶段完成的联编。编译时多态性主要是通过函数重载和运算符重载实现的。优点是:效率高。 运行时的多态是用动态联编(又后期或滞后联编)实现的。动态联编是运行阶段完成的联编。运行时多态性主要是通过虚函数来实现的。 优点是:灵活性好,易维护。 根据Bjarne Stoustrup的说法,多态性其实就是方法调用的机制,也就是说当在编译时(静态绑定)无法确定一个对象的实际类型时,应当能够在运行时基于对象的实际类型来决定调用的具体方法(动态绑定)。 本章重点 运算符重载 虚函数 重载(overload),覆盖(override),隐藏(hide) 重载(overload):   必须在一个域中,函数名称相同但是函数参数不同,重载的作用就是同一个函数有不同的行为,因此不是在一个域中的函数是无法构成重载的,这个是重载的重要特征 。   所以,相同的函数名的函数,在基类和派生类中的关系只能是覆盖或者隐藏。 P163误 重载(overload),覆盖(override),隐藏(hide) 如果基类中的函数和派生类中的两个名字一样的函数f满足下面的两个条件   (a)在基类中函数声明的时候有virtual关键字   (b)基类CB中的函数和派生类CD中的函数一模一样,函数名,参数,返回类型都一样。   那么这就是叫做覆盖(override)/(钱能叫overlap),这也就是虚函数。   那么其他的情况呢??只要名字一样,不满足上面覆盖的条件,就是隐藏了。 重载(overload),覆盖(override),隐藏(hide) 隐藏(hide):   指的是派生类的成员函数隐藏了基类函数的成员函数.隐藏一词可以这么理解:在调用一个类的成员函数的时候,编译器会沿着类的继承链逐级的向上查找函数的定义,如果找到了那么就停止查找了,所以如果一个派生类和一个基类都有同一个同名(暂且不论参数是否相同)的函数,而编译器最终选择了在派生类中的函数,那么我们就说这个派生类的成员函数隐藏了基类的成员函数,也就是说它阻止了编译器继续向上查找函数的定义 可以简单的理解成,在派生类域中,看不到基类中的那个同名函数了 运算符重载 基本数据类型可以用运算符+、-、×、/ 等进行相关运算。那用户自定义的数据类型--类,行不行? C++语言允许程序员重新定义已有的运算符,使其能按用户的要求完成一些特定的操作,这就是所谓的运算符重载。 Q.为什么要用它? 目的:使代码更直观,更易于理解。 class A {A add(double); A add(A s); }; A a,b,c; b=a.add(1.0); // b=a+1.0; c=a.add(b); // c=a+b; 运算符重载是对已有的运算符赋予多重含义,同一个运算符作用于不同类型的数据导致不同类型的行为。 C++中预定义的运算符的操作对象只能是基本数据类型,实际上,对于很多用户自定义类型,也需要有类似的运算操作,这就提出了对运算符进行重新定义,赋予已有符号以新功能的要求。 运算符重载的实质就是函数重载。在实现过程中,首先把指定的运算表达式转化为对运算符函数的调用,运算对象转化为运算符函数的实参,然后根据实参的类型来确定需要调用的函数,这个过程是在编译过程中完成的。 运算符重载的规则 (1)C++中的运算符除了少数几个以外,全部可以重载,而且只能重载已有的这些运算符。 算术运算符:+、-、*、/、%、++、-- 位操作运算符:、|、~、^、、 逻辑运算符:!、、|| 比较运算符:、、=、=、==、!= 赋值运算符:=、+=、-=、*=、/= 其他运算符

文档评论(0)

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

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

1亿VIP精品文档

相关文档