C程序设计语言揣锦华第8章多态性

C程序设计语言揣锦华第8章多态性

ID:36875596

大小:329.50 KB

页数:87页

时间:2019-05-10

C程序设计语言揣锦华第8章多态性_第1页
C程序设计语言揣锦华第8章多态性_第2页
C程序设计语言揣锦华第8章多态性_第3页
C程序设计语言揣锦华第8章多态性_第4页
C程序设计语言揣锦华第8章多态性_第5页
资源描述:

《C程序设计语言揣锦华第8章多态性》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库

1、第8章多态性8.1多态性概述8.2运算符重载8.3虚函数8.4抽象类8.1多态性概述所谓多态性是指同一个接口可以通过多种方法调用,如图8-1所示。通俗地说,多态性是指用一个相同的名字定义不同的函数,这些函数的执行过程不同,但是有相似的操作,即用同样的接口访问不同的函数。比如,一个对象中有很多求两个数中最大值的行为,虽然可以针对不同的数据类型,写很多不同名称的函数来实现,但事实上,它们的功能几乎完全相同。这时,就可以利用多态的特征,用统一的标识来完成这些功能。图8-1多态性为用户提供单一接口示意图面向对象的多态性从实现的角度来讲,可以分为静态多态性和动态

2、多态性两种。静态多态性是在编译的过程中确定同名操作的具体操作对象的,而动态多态性则是在程序运行过程中动态地确定操作所针对的具体对象的。这种确定操作具体对象的过程就是联编(binding),也称为绑定。联编是指计算机程序自身彼此关联的过程。也就是把一个标识符名和一个存储地址联系在一起的过程。用面向对象的术语讲,就是把一条消息和一个对象的方法相结合的过程。所谓消息,是指对类的成员函数的调用。不同的方法是指不同的实现,也就是调用了不同的函数。按照联编进行阶段的不同,联编方法可以分为两种:静态联编和动态联编。这两种联编过程分别对应着多态的两种实现方式。联编工作

3、在编译连接阶段完成的情况称为静态联编。在编译、连接过程中,系统就可以根据类型匹配等特征确定程序中操作调用与执行该操作的代码的关系,即确定某一个同名标识到底是要调用哪一段程序代码。函数重载和运算符重载就属于静态多态性。和静态联编相对应,如果联编工作在程序运行阶段完成,则称为动态联编。在编译、连接过程中无法解决的联编问题,要等到程序开始运行之后再来确定。例如,本章将要介绍的虚函数就是通过动态联编完成的。函数重载在函数及类的章节中曾做过详细的讨论,所以在本章中,静态多态性主要介绍运算符重载;对于动态多态性,将对虚函数作详细介绍。8.2运算符重载C++中预定义

4、的运算符的操作对象只能是基本数据类型。实际上,对于很多用户自定义的类型(如类),也需要有类似的运算操作。例如,下面的程序声明了一个点类point。classpoint//point类声明{private:intx,y;public://构造函数point(intxx=0,intyy=0){x=xx;y=yy;}intget_x();//显示x值intget_y();//显示y值//...};于是我们可以这样声明点类的对象:pointp1(1,1),p2(3,3)如果我们需要对p1和p2进行加法运算,该如何实现呢?我们当然希望能使用“+”运算符,写出表达

5、式“p1+p2”,但是编译的时候却会出错,因为编译器不知道该如何完成这个加法。这时候,我们就需要自己编写程序来说明“+”在作用于point类对象时,该实现什么样的功能,这就是运算符重载。运算符重载是对已有的运算符赋予多重含义,使同一个运算符作用于不同类型的数据时,导致不同类型的行为。在运算符重载的实现过程中,首先把指定的运算表达式转化为对运算符函数的调用,运算对象转化为运算符函数的实参,然后,根据实参的类型来确定需要调用的函数。这个过程是在编译过程中完成的。8.2.1运算符重载的规则运算符是在C++系统内部定义的,它们具有特定的语法规则,如参数说明、运

6、算顺序、优先级别等。因此,运算符重载时必须要遵守一定的规则。①C++中的运算符除了少数几个(类属关系运算符“.”、作用域分辨符“::”、成员指针运算符“*”、sizeof运算符和三目运算符“?:”)之外,全部可以重载,而且只能重载C++中已有的运算符,不能臆造新的运算符。②重载之后运算符的优先级和结合性都不能改变,也不能改变运算符的语法结构,即单目运算符只能重载为单目运算符,双目运算符只能重载为双目运算符。③运算符重载后的功能应当与原有功能相类似。④重载运算符含义必须清楚,不能有二义性。运算符的重载形式有两种:重载为类的成员函数和重载为类的友元函数。运

7、算符重载为类的成员函数的一般语法形式如下:<函数类型>operator<运算符>(形参表){函数体;}运算符重载为类的友元函数的一般语法形式如下:friend<函数类型>operator<运算符>(形参表){函数体;}其中:①函数类型指定了重载运算符的返回值类型,也就是运算结果类型。②operator是定义运算符重载函数的关键字。③运算符是要重载的运算符名称。④形参表给出重载运算符所需要的参数和类型。⑤friend是对于运算符重载为友元函数时,在函数类型说明之前使用的关键字。特别需要注意的是,当运算符重载为类的成员函数时,函数的参数个数比原来的操作数个

8、数要少一个(后置“++”、“--”除外);当重载为类的友元函数时,参数个数与原操作数的个数相同

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。