学习课件第7章多态性与虚函数.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文档。上传文档
查看更多
本章内容 多态性概述 运算符重载 虚函数 多态性 多态性是面向对象程序设计的一个重要特征。 多态性:是指发出同样的消息被不同类型的 对象接收时而导致不同的行为。 所谓发消息就是调用类中的成员函数。 多态的实现 函数重载 运算符重载 虚函数 静态多态性与动态多态性 静态多态性(静态联编、静态绑定) 联编工作出现在编译阶段。 用对象名或者类名来限定要调用的函数 动态多态性(动态联编、动态绑定) 联编工作在程序运行时执行 用基类指针或者引用来限定要调用的函数。 在程序运行时根据派生类的对象才能确定将要调用哪个函数。 静态联编/绑定(Static Binding) class Myclass{ public: . . . function( ); function(int); function(int , int); . . . } ; void main( ){ Myclass a(5); a. function(7); … } 程序输出的结果为: c1=(3,4i) c2=(5,-10i) c3=c1+c2=(8,-6i) 问题 如何处理 对象1 + 对象2 ? 计算机怎样处理运算符 int num1, num2, num3; num3 = num1 + num2; 计算机怎样处理运算符 int num1, num2, num3; num3 = num1 + num2; 计算机怎样处理运算符 double num1, num2, num3; num3 = num1 + num2; 计算机怎样处理运算符 int num1, num2, num3; num3 = num1 + num2; 重载 + 运算符 我们打算重载运算符用于对复数类的对象的操作 Complex num1, num2, num3; num3 = num1 + num2; 运算符重载的实质 运算符重载是对已有的运算符赋予新的含义 必要性 C++中预定义的运算符其运算对象只能是基本数据类型,而不适用于用户自定义类型(如类) 重载运算符主要用于对类的对象以同样的形式按重新定义的方式操作 实现机制 是一种特殊函数的重载。 运算符重载 运算符重载有两种形式: 表达式: 左操作数 + 右操作数 重载为类的成员函数 左操作数 .operator+ (右操作数 ) 重载为类的友元函数 operator+ (左操作数 , 右操作数 ) 将“+”运算重载为复数类的成员函数 规则: 实部和虚部分别相加。 操作数: 两个操作数都是复数类的对象。 运算符重载 由于友元函数没有隐含指向当前对象的 this指针,所以, 一个单目运算符重载为类的友元函数时, 其参数个数为1个; 一个双目运算符重载为类的友元函数 时,其参数个数必须为2个。 两种重载形式的比较 对于单目运算符、复合赋值运算符 “+=、-=、/=、*=” 等常选择用成员函数重载。 对于运算符“=?()?[]、-”只能选择用成员函数重载。 对于其他运算符,如“+、-、*、/”等双目运算符,常常选择用友元函数重载,以适应更多的计算形式? 不可重载的运算符 “?” 圆点运算符 “?*” 成员指针选择运算符 “∷” 域分辨运算符 “?:” 条件运算符 “sizeof” 长度运算符 除以上五个运算符外,其余运算符均可重载? 重载运算符的规则 只能重载C++中已有的可重载的运算符,不能建立新的运算符。 重载运算符时不能改变原运算符操作数的个数、原有运算符的优先级和结合性,也不能改变原运算符对于内部基本类型对象的含义。 如果重载了某个运算符(如“=”),并不意味着重载了相关的运算符(如“+=”、“-=”等)。 对所有对象已重载了“=”和“”运算符 C++内部已对所有对象重载了“=”和“”运算符,实现的操作是: “=” :把“=” 右侧对象的数据成员赋给左侧对象的对应的数据成员。 “” :返回对象的地址。 Complex operator = (Complex c) { real = c.real; imag = c.imag; return *this; } 对复数类应重载运算符 void Complex::display() { cout (real, imagi)endl; } 函数

文档评论(0)

新起点 + 关注
实名认证
文档贡献者

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

1亿VIP精品文档

相关文档