C++面向对象程序设计 教学课件 作者 李素若 任正云 张牧 陈万华 编著第7章 运算符重载.ppt

C++面向对象程序设计 教学课件 作者 李素若 任正云 张牧 陈万华 编著第7章 运算符重载.ppt

ID:50019541

大小:137.50 KB

页数:32页

时间:2020-03-07

C++面向对象程序设计 教学课件 作者 李素若 任正云 张牧 陈万华 编著第7章 运算符重载.ppt_第1页
C++面向对象程序设计 教学课件 作者 李素若 任正云 张牧 陈万华 编著第7章 运算符重载.ppt_第2页
C++面向对象程序设计 教学课件 作者 李素若 任正云 张牧 陈万华 编著第7章 运算符重载.ppt_第3页
C++面向对象程序设计 教学课件 作者 李素若 任正云 张牧 陈万华 编著第7章 运算符重载.ppt_第4页
C++面向对象程序设计 教学课件 作者 李素若 任正云 张牧 陈万华 编著第7章 运算符重载.ppt_第5页
资源描述:

《C++面向对象程序设计 教学课件 作者 李素若 任正云 张牧 陈万华 编著第7章 运算符重载.ppt》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库

1、第7章运算符重载7.1运算符重载概述7.1.1运算符重载的好处运算符重载允许C/C++的运算符在用户定义类型(通常指类)上拥有一个用户定义的意义。当你定义一个类之后,系统是不会对你自己定义的类进行算术运算等运算的,只有当你对相应的运算府重载之后,你才可以对两个或者多个对象进行运算。运算符操作函数是重载函数,比如对操作符+系统中可能有如下原型():intoperator+(inta,intb);shortoperator+(shorta,shortb);doubleoperator+(doublea,doubleb);longoperator+(longa,longb)

2、...定义一个简化的复数类complex:classcomplex{public:doublereal,imag;complex(doubler=0,doublei=0){real=r;imag=i;}};若要把类complex的两个对象com1和com2加在一起,下面的语句是不能实现的:main(){complexcom1(1.1,2.2),com2(3.3,4.4),total;total=com1+com2;//错误//…return0;}若要将上述类complex的两个对象相加,只要编写一个运算符函数operator+(),如下所示:complexoperat

3、or+(complexom1,complexom2){complextemp;temp.real=om1.real+om2.real;temp.imag=om1.imag+om2.imag;returntemp;}我们就能方便地使用语句:total=com1+com2;将类complex的两个对象com1和com2相加。7.1.2运算符重载的规则(1)重载功能应当与原有功能相类似;(2)程序员不能臆造新的运算符来扩充C++语言;(3)“.”、“*”、“::”、sizeof和“?:”这五个运算符不能重载;(4)不能改变运算符的操作个数;(5)不能改变运算符原有的优先级;

4、(6)不能改变原有的结合性;(7)不能改变运算符对预定义类型数据的操作方式。7.2运算符重载函数的两种形式运算符重载一般采用如下二种形式:一是定义为它将要操作的类的成员函数,二是定义为类的友元函数。7.2.1友元运算符函数在C++中,可以把运算符重载函数定义成某个类的友元函数,称为友元运算符函数。1.友元运算符函数定义的语法形式友元运算符函数的原型在类的内部声明格式如下:classX{//…friend返回类型operator运算符(形参表);//…}在类外定义友元运算符函数的格式如下:返回类型operator运算符(形参表){函数体}2.双目运算符重载当用友元函数重

5、载双目运算符时,两个操作数都要传递给运算符函数。例7.1用友元运算符函数进行复数运算。一般而言,如果在类X中采用友元函数重载双目运算符@,而aa和bb是类X的两个对象,则以下两种函数调用方法是等价的:aa@bb;//隐式调用operator@(aa,bb);//显式调用3.单目运算符重载用友元函数重载单目运算符时,需要一个显式的操作数。例7.2用友元函数重载单目运算符“-”。例7.3用友元函数重载单目运算符“++”(传递对象参数)例7.4用友元函数重载单目运算符“++”(传递引用参数)使用友元函数重载单目运算符“++”或“--”时,采用引用参数传递操作数。一般而言,如

6、果在类X中采用友元函数重载单目运算符@,而aa是类X的对象,则以下两种函数调用方法是等价的:@aa;//隐式调用operator@(aa);//显式调用说明:(1)运算符重载函数operator@()可以返回任何类型;(2)可以不保持原有含义;(3)不能定义新的运算符;(4)编译器根据参数类型和个数决定调用哪个重载函数;(5)不能用友元重载的运算符是:=,(),[],->;(6)单目运算符“-”可不改变操作数自身的值,所以在重载单目运算符“-”的友元函数的原型可写成:frinendABoperator-(ABobj);7.2.2成员运算符函数在C++中,可以把运算符函

7、数定义成某个类的成员函数,称为成员运算符函数。1.成员运算符函数定义的语法形式成员运算符函数的原型在类的内部声明格式如下:classX{//…返回类型operator运算符(形参表);//…}在类外定义成员运算符函数的格式如下:返回类型X::operator运算符(形参表){函数体}2.双目运算符重载对双目运算符而言,成员运算符函数的形参表中仅有一个参数,它作为运算符的右操作数,此时当前对象作为运算符的左操作数,它是通过this指针隐含地传递给函数的。例7.5采用成员运算符函数来完成例7.1中同样的工作。一般而言,如果在类X中采用成员函数重载双目运算

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

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

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