轻松学C之运算符重载x

轻松学C之运算符重载x

ID:38726520

大小:1.75 MB

页数:60页

时间:2019-06-18

轻松学C之运算符重载x_第1页
轻松学C之运算符重载x_第2页
轻松学C之运算符重载x_第3页
轻松学C之运算符重载x_第4页
轻松学C之运算符重载x_第5页
资源描述:

《轻松学C之运算符重载x》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库

1、第12章运算符重载前一章介绍了多态的实现技术,主要包括函数的重载和虚函数。本章介绍实现多态的另外一个方法——运算符重载及类类型转换。12.1运算符重载概述运算符重载实现的是编译时的多态,是对已有的运算符赋予多重含义,使同一个运算符作用于不同类型的数据时,导致不同类型的行为。12.1.1运算符重载C++预定义的运算符只是针对基本数据类型,而对于自定义的数据类型,比如类,却没有类似的运算符。于是,引入运算符重载的目的如图12-1所示。图12-1引入运算符重载的目的运算符重载是运用函数重载的方法,对C++提供的标准运算符重新

2、定义,以完成某种特定的操作。C++中的每一个运算符对应着一个运算符函数,在实现过程中,把指定的运算表达式中的运算符转化为对运算符函数的调用,而表达式中的运算对象转化为运算符函数的实参,这个过程是在编译阶段完成的。如图12-2中的例子。图12-2编译阶段转换因此,可以将运算符重载看做是一种特殊的函数重载。运算符函数定义的一般形式如图12-3所示。图12-3运算符函数定义的一般形式12.1.2运算符重载的特点尽管运算符重载是一种特殊的函数重载,但相比函数重载,运算符重载有着自身的一些特点。运算符重载使用operator关键

3、字对重载函数进行标识和定义,其有三种形式,如表12-1所示。表12-1三种运算符的operator表示形式C++运算符重载不允许用户自己定义新的运算符,只能对已有的运算符进行重载。在C++中,绝大部分运算符允许重载,只有几个不能被重载,如图12-4所示。运算符分类常规表示operator表示形式参数个数中缀a+boperator+(a,b)二元前缀-aoperator-(a)一元后缀a++operator++(a)一元图12-4几个不能被重载的运算符此外,运算符重载时参数个数必须固定,即重载函数的参数个数与标准运算符要

4、保持一致,如图12-5所示。图12-5重载函数的参数个数与标准运算符要保持一致【示例12-1】下面通过一个示例来理解在实际的程序中是如何进行运算符重载的,其实现代码及结果如图12-6所示。图12-6运算符重载实例关于重载操作符的一些限制:1.不能改变重载运算符的优先级和结合性。2.默认重载运算符不能用作参数。3.不能改变原有运算符的参数个数。4.不能创建新的运算符。5.并不是所有的运算符都支持重载,但是大多数支持。12.2运算符重载形式运算符的重载形式有两种:一种是重载为类的成员函数;另一种是重载为类的友元函数。对于每

5、一种重载形式,由于运算符不同,都可以分为双目运算符和单目运算符的实现。12.2.1运算符重载为类的成员函数将运算符重载为类的成员函数,称为运算符成员函数。实际使用时,总是通过该类的对象访问重载的运算符。运算符成员函数在类内进行声明,在类外进行定义,一般形式如图12-7所示。图12-7运算符成员函数在类内进行声明,在类外进行定义的一般形式1双目运算符重载为成员函数双目运算符重载为成员函数时,左操作数是访问该重载运算符的对象本身的数据,此时成员运算符函数只有一个参数。如图12-8所示。图12-8双目运算符重载为成员函数双目

6、运算符重载为成员函数后,就可以在主函数或其他类中进行调用了。在C++中,一般有显式和隐式两种调用方法,如图12-9所示。图12-9运算符成员函数的调用方法【示例12-2】下面程序对双目运算符进行了重载,并在主函数中调用这些运算符进行具体操作,其分别采用了显式调用和隐式调用两种方式。其实现代码及结果如图12-10所示。图12-10双目运算符重载为成员函数实例2单目运算符重载为成员函数单目运算符重载为成员函数时,操作数是访问该重载运算符对象本身的数据,由this指针指出,此时成员运算符函数没有参数。如图12-11所示。图1

7、2-11单目运算符重载为成员函数与双目运算符的重载类似,单目运算符重载为成员函数后,在调用时也有显式和隐式两种调用方法,如图12-12所示。图12-12单目运算符重载为成员函数的调用方法【示例12-3】下面程序对单目运算符进行重载,在调用该运算符时也通过显式调用和隐式调用两种方式来实现。其实现代码及结果如图12-13所示。图12-13单目运算符重载为成员函数实例12.2.2运算符重载为类的友元函数将重载的运算符成员函数定义为类的友元函数,称为友元运算符函数。友元运算符函数不是类的成员,不属于任何一个类对象,所以没有th

8、is指针。因此,重载双目运算符时要有两个参数,重载单目运算符时要一个参数。友元运算符函数在类内进行声明,在类外进行定义,一般形式如图12-14所示。图12-14友元运算符函数在类内进行声明,在类外进行定义的一般形式1双目运算符重载为友元函数双目运算符重载为友元函数时,由于没有this指针,所以两个操作数都要通过友元运算符函数的参数

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

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

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