第7章 运算符重载优秀PPT.ppt
《第7章 运算符重载优秀PPT.ppt》由会员分享,可在线阅读,更多相关《第7章 运算符重载优秀PPT.ppt(21页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、第7章 运算符重载现在学习的是第1页,共21页 C+C+语言允许程序员重新定义已有的运算符,使语言允许程序员重新定义已有的运算符,使其能按用户的要求完成一些特定的操作,这就是所其能按用户的要求完成一些特定的操作,这就是所谓的谓的运算符重载运算符重载(operator overload)(operator overload)。运算符重。运算符重载与函数重载相似,其目的是设置某一运算符,载与函数重载相似,其目的是设置某一运算符,让它具有另一种功能,尽管此运算符在原先让它具有另一种功能,尽管此运算符在原先C+C+语言中代表另一种含义,但他们彼此之间并不冲语言中代表另一种含义,但他们彼此之间并不冲突。
2、突。C+C+会根据运算符的位置辨别应使用哪一种会根据运算符的位置辨别应使用哪一种功能进行运算。功能进行运算。现在学习的是第2页,共21页7.1 7.1 运算符重载概述运算符重载概述运运算算符符重重载载是是对对系系统统提提供供的的运运算算符符赋赋予予多多重重含含义义,同同一一个个运运算算符符作作用用于于不不同同类类型型的的数数据据导致不同类型的行为。导致不同类型的行为。运运算算符符重重载载的的实实质质就就是是函函数数重重载载。在在实实现现过过程程中中,首首先先把把指指定定的的运运算算表表达达式式转转化化为为对对运运算算符符函函数数的的调调用用,运运算算对对象象转转化化为为运运算算符符函函数数的的
3、实实参参,然然后后根根据据实实参参的的类类型型来来确确定定需需要要调调用用的函数,这个过程是在编译过程中完成的。的函数,这个过程是在编译过程中完成的。C+C+可以重载的运算符如表可以重载的运算符如表7-17-1所示所示 ;C+C+不能被重载的运算符如表不能被重载的运算符如表7-27-2所示。所示。现在学习的是第3页,共21页表表7-1 7-1:C+C+可以重载的运算符可以重载的运算符!+-*&/%=!=|&+=*=/=%=&=|=,-*-()=+-newdelete表表7-2 7-2:C+C+不可以重载的运算符不可以重载的运算符.*:?:?:#现在学习的是第4页,共21页v运算符重载的规则如下
4、:运算符重载的规则如下:(1 1)C+C+中中的的运运算算符符除除了了少少数数几几个个以以外外,几几乎乎全全部部可可以以重重载载,而且只能重载已有的这些运算符。而且只能重载已有的这些运算符。(2 2)重载之后运算符的优先级和结合性都不会改变重载之后运算符的优先级和结合性都不会改变。(3 3)运算符重载是针对新类型数据的实际需要,对原有运算符)运算符重载是针对新类型数据的实际需要,对原有运算符进行适当的改造。一般来讲,重载的功能应当与原有进行适当的改造。一般来讲,重载的功能应当与原有功能类功能类似似。(4 4)运算符重载不能改变原运算符的操作对象个数,同运算符重载不能改变原运算符的操作对象个数,
5、同时至少要有一个操作对象是自定义类型。时至少要有一个操作对象是自定义类型。现在学习的是第5页,共21页7.2 7.2 运算符重载的实现运算符重载的实现运运算算符符的的重重载载形形式式有有两两种种:重重载载为为类类的的成成员员函函数数和和重重载载为为类类的的友友元元函数。函数。1.1.运算符重载为类的成员函数的语法形式如下:运算符重载为类的成员函数的语法形式如下:operator operator ();friend friend operator operator ();其中其中:指定了重载运算符的返回值类型指定了重载运算符的返回值类型;operatoroperator是定义运算符重载函数的关
6、键词是定义运算符重载函数的关键词;给定了要重载的运算符名称,是给定了要重载的运算符名称,是C+C+中可重载的运算符中可重载的运算符;中给出重载运算符所需要的参数和类型中给出重载运算符所需要的参数和类型;对对于于运运算算符符重重载载为为友友元元函函数数的的情情况况,还还要要在在函函数数类类型型说说明明之之前前使使用用friendfriend关关键键词词来说明。来说明。现在学习的是第6页,共21页注意事项:注意事项:当运算符重载为类的成员函数时,函数的参数个数比原来的当运算符重载为类的成员函数时,函数的参数个数比原来的运算数个数要少一个(后缀运算数个数要少一个(后缀+、-除外);当重载为类的友除外
7、);当重载为类的友元函数时,参数个数与原运算数的个数相同。元函数时,参数个数与原运算数的个数相同。单目运算符最好重载为成员函数;单目运算符最好重载为成员函数;双目运算符则最好重载为友元函数;双目运算符则最好重载为友元函数;运算符重载的含义必须清楚;运算符重载的含义必须清楚;运算符重载不能有二义性;运算符重载不能有二义性;现在学习的是第7页,共21页7.3 7.3 单目运算符重载单目运算符重载类类的的单单目目运运算算符符可可重重载载为为一一个个没没有有参参数数的的非非静静态态成成员员函函数数或或者者带带有有一一个个参参数数的的非非成成员员函函数数,参参数数必必须须是是用用户户字字定定义义类型的对
8、象或者是对该对象的引用。类型的对象或者是对该对象的引用。在在C+C+中中,单单目目运运算算符符有有+和和-,它它们们是是变变量量自自动动增增1 1和和自自动动减减1 1的的运运算算符符。在在类类中中可可以以对对这这两两个个单单目目运运算符进行重载。算符进行重载。如如同同“+”运运算算符符有有前前缀缀、后后缀缀两两种种使使用用形形式式,“+”和和“-”重重载载运运算算符符也也有有前前缀缀和和后后缀缀两两种种运运算算符符重重载载形形式式,以以“+”重载运算符为例,其语法格式如下:重载运算符为例,其语法格式如下:operator+operator+();();/前缀运算前缀运算 operator+o
9、perator+(intint););/后缀运算后缀运算 现在学习的是第8页,共21页使用前缀运算符的语法格式如下:使用前缀运算符的语法格式如下:+;使使用用运运算算符符前前缀缀时时,对对对对象象(操操作作数数)进进行行增增量量修修改改,然然后后再再返返回回该该对对象象。所所以以前前缀缀运运算算符符操操作作时时,参参数数与与返返回回的的是是同同一一个个对对象象。这这与与基基本数据类型的运算符前缀类似,返回的也是左值。本数据类型的运算符前缀类似,返回的也是左值。使用后缀运算符的语法格式如下:使用后缀运算符的语法格式如下:+;使使用用运运算算符符后后缀缀时时,必必须须再再增增量量之之前前返返回回原
10、原有有的的对对象象值值。为为此此,需需要要创创建建一一个个临临时时对对象象,存存放放原原有有的的对对象象,以以便便对对操操作作数数(对对象象)进进行行增增量量修修改改时时,保保存存最最初初的的值值。运运算算符符后后缀缀操操作作时时返返回回的的时时原原有有对对象象值值,不不是是原原有有对对象象,原原有有对对象象已已经经被被增增量量修修改改,所以,返回的应该是存放原有对象值的临时对象。所以,返回的应该是存放原有对象值的临时对象。(见例(见例1 1:+运算符重载)运算符重载)现在学习的是第9页,共21页7.4 7.4 双目运算符重载双目运算符重载对对于于双双目目运运算算符符,一一个个运运算算数数是是
11、对对象象本本身身的的数数据据,由由thisthis指指针针给给出出,另另一一个个运运算算数数则则需需要要通通过过运运算算符符重重载载函函数数的的参参数数表表来来传传递递。下下面面分别介绍这两种情况。分别介绍这两种情况。将双目运算符将双目运算符B B重载为类的成员函数:重载为类的成员函数:使之能够实现表达式使之能够实现表达式“oprd1 B oprd2oprd1 B oprd2”,其中,其中oprd1oprd1为为A A类的对象,则应当把类的对象,则应当把B B重载为重载为A A类的成员函数,该函数只有一个形参,形参的类型是类的成员函数,该函数只有一个形参,形参的类型是oprd2oprd2所属所
12、属的类型。经过重载之后,表达式的类型。经过重载之后,表达式oprd1 B oprd2oprd1 B oprd2就相当于函数调就相当于函数调用用“oprd1.operator Boprd1.operator B(oprd2oprd2)”。将双目运算符将双目运算符B B重载为类的友元函数:重载为类的友元函数:这样,它就可以自由地访问这样,它就可以自由地访问该类的任何数据成员。这时,运算符所需要的运算数都需要该类的任何数据成员。这时,运算符所需要的运算数都需要通过函数的形参表来传递,在参数表中形参从左到右的顺序通过函数的形参表来传递,在参数表中形参从左到右的顺序就是运算符运算数的顺序。就是运算符运算
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 第7章 运算符重载优秀PPT 运算 重载 优秀 PPT
限制150内