C++程序计教程第13章多态性与虚函数.ppt

C++程序计教程第13章多态性与虚函数.ppt

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

第13章 多态性与虚函数 13.1 普通成员函数重载 13.2 派生类指针 13.3 虚函数 13.4 纯虚函数与抽象类 多态性是面向对象程序设计的重要特征之一。所谓多态性是指当不同的对象收到相同的消息时,产生不同的动作。C++的多态性具体体现在运行和编译两个方面,在程序运行时的多态性通过继承和虚函数来体现,而在程序编译时多态性体现在函数和运算符的重载上。 13.1 普通成员函数重载 在C++语言中,只有在声明函数原型时形式参数的个数或者对应位置的类型不同,两个或更多的函数就可以共用一个名字。这种在同一作用域中允许多个函数使用同一函数名的措施被称为重载(overloading)。函数重载是C++程序获得多态性的途径之一。 13.1.1 函数重载的方法 函数重载要求编译器能够唯一地确定调用一个函数时应执行哪个函数代码,既采用哪个函数实现。确定函数实现时,要求从函数参数的个数和类型上来区分。这就是说,进行函数重载时,要求同名函数在参数个数上不同,或者参数类型不同。否则,将无法实现函数重载。 例13-1:给出以下程序的运行结果。 #include iostream.h int square(int x) { return x*x; } double square(double y) { return y*y; } main() { cout”The square of integer 7 is”square(7)endl; cout” The square of double 7.5 is”square(7.5)endl; return 0; } 例13-2:用重载函数实现求圆和矩形的周长。 #include iostream.h const double PI=3.1415; double length(float r) { return 2*PI*r; } double length(float x,float y) { return 2*(x+y); } 13.1.2 函数重载的表示形式 普通成员函数重载可表达为两种形式: 1. 在一个类说明中重载 例如: Show ( int , char ) ; Show ( char * , float ) ; 2. 基类的成员函数在派生类重载。有3种编译区分方法 (1)根据参数的特征加以区分 例如: Show ( int , char ) 与 Show ( char * , float ) 不是同一函数,编译能够区分 (2)使用“ :: ”加以区分 例如: A :: Show ( ) 有别于 B :: Show ( ) (3)根据类对象加以区分 例如: Aobj.Show ( )调用 A :: Show ( ) Bobj.Show ( )调用 B :: Show ( ) 13.1.3 函数重载的注意事项 在C++语言中,编译程序选择相应的重载函数版本时函数返回值类型是不起作用的。不能仅靠函数的返回值来区别重载函数,必须从形式参数上区别开来。例如: void print(int a); void print(int a,int b); int print(float a[]); 这三个函数是重载函数,因为C++编译程序可以从形式参数上将它们区别开来。 但: int f(int a); double f(int a); 这两个函数就不是重载函数,编译程序认为这是对一个函数的重复说明,因为两个函数的形式参数个数与相应位置的类型完全相同。 由typedef定义的类型别名并没有真正创建一个新的类型,所以以下程序段: typedef double money; double calculate(double income); money calculate(money income); 也是错误的函数重载。 同样道理,不同参数传递方式也无法区别重载函数,如: void func(int value); void func(int value); 也不能作为重载函数。 在程序中不可滥用函数重载,不适当的重载会降低程序的可读性。C++语言并没有提供任何约束限制重载函数之间必须有关联,程序员可能用相同的名字定义两个互不相关的函数。实际上函数重载暗示了一种关联,不应该重载那些本质上有区别的函数,只有当函数实现的语义非常相近时才应使用函数重载。 13.1.4 函数重载的二义

您可能关注的文档

文档评论(0)

130****9768 + 关注
实名认证
内容提供者

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

1亿VIP精品文档

相关文档