网站大量收购独家精品文档,联系QQ:2885784924

第7章 多态性及虚函数(成教).ppt

  1. 1、本文档共54页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
第7章 多态性及虚函数(成教)

第7章 多态性与虚函数 多态性是面向对象程序设计的重要特征之一,多态性机制: 增加了面向对象软件系统的灵活性 减少了冗余信息 提高了软件的可重用性和可扩充性 7.1 多态性概述 多态性含义: 指不同对象收到相同的消息时,产生不同的动作。 体现在程序中为: 多态性是指用一个名字定义不同的函数,这些函数执行不同但又类似的操作,从而可以使用相同的调用方式来调用这些具有不同功能的同名函数。 7.1.1 多态的分类 C++中的多态性可以分为四类: 参数多态:由类模板实例化各个类都有的具有相同的操作,而操作对象的类型却各不相同 包含多态:主要通过虚函数来实现。强调不同类中的同名成员函数的多态行为 强制多态:即,将一个变元的类型加以变化,比如加法运算时候浮点数与整数的强制转换(编译程序通过语义操作,把操作对象的类型强行加以变换,以符合函数或操作符的要求) 重载多态:普通函数、类的成员函数的重载、运算符重载属于重载多态。 前面两种统称为通用多态,而后面两种统称为专用多态。 7.1.2 多态的实现 多态从实现的角度分为两类: 编译时的多态: 是通过静态联编来实现的。静态联编就是在编译阶段完成的联编。编译时多态性主要是通过函数重载和运算符重载实现的。 运行时的多态: 是用动态联编实现的。动态联编是运行阶段完成的联编。运行时多态性主要是通过虚函数来实现的。 7.2 运算符重载 重载,即重新赋予新的含义。 函数重载就是对一个已有的函数赋予新的含义,使之实现新功能。 什么是运算符重载? 运算符也可以重载,对C++已提供的运算符进行重载,赋予它们新的含义,使之一名多用。譬如,用“+”号如何进行两个复数的相加? C++中不能直接用运算符“+”对复数进行相加运算。 可以通过定义一个专门的函数来实现复数相加。 例7.1 通过函数来实现复数相加。 #include iostream using namespace std; class Complex //定义Complex类 {public: Complex( ){real=0;imag=0;} //定义构造函数 Complex(double r,double i) //构造函数重载 {real=r; imag=i;} Complex complex_add(Complex c2); //声明复数相加函数 void display( ); //声明输出函数 private: double real; //实部 double imag; //虚部 }; Complex Complex∷complex_add(Complex c2) { Complex c; c.real=real+c2.real; c.imag=imag+c2.imag; return c; } void Complex∷display( ) //定义输出函数 { cout″(″real″,″imag″i)″endl; } int main( ) { Complex c1(3,4),c2(5,-10),c3; //定义3个复数对象 c3=plex_add(c2); //调用复数相加函数 cout″c1=″; c1.display( ); //输出c1的值 cout″c2=″; c2.display( ); //输出c2的值 cout″c1+c2=″; c3.display( ); //输出c3的值 return 0; } 运行结果如下: c1=(3,4i) c2=(5,-10i) c1+c2=(8,-6i) 结果是正确的,但调用方式不直观、太烦琐,不方便。能否也和整数的加法运算一样,直接用加号“+”来实现复数运算呢? 如:c3=c1+c2; 如果能做到,就为对象的运算提供了很大的方便。 这就需要对运算符“+”进行重载。 7.2.1 运算符重载的方法 运算符重载是通过定义函数实现的:定义一个重载运算符的函数,在需要执行被重载

文档评论(0)

yaocen + 关注
实名认证
内容提供者

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

1亿VIP精品文档

相关文档