C++面向对象程序设计 李素若 杜华兵主著 c6.ppt

C++面向对象程序设计 李素若 杜华兵主著 c6.ppt

ID:50082238

大小:158.50 KB

页数:45页

时间:2020-03-08

C++面向对象程序设计 李素若 杜华兵主著 c6.ppt_第1页
C++面向对象程序设计 李素若 杜华兵主著 c6.ppt_第2页
C++面向对象程序设计 李素若 杜华兵主著 c6.ppt_第3页
C++面向对象程序设计 李素若 杜华兵主著 c6.ppt_第4页
C++面向对象程序设计 李素若 杜华兵主著 c6.ppt_第5页
资源描述:

《C++面向对象程序设计 李素若 杜华兵主著 c6.ppt》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库

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

2、(longa,longb)...定义一个简化的复数类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;}6.1.1运算符重载函数的定义运算符函数定义的一般格式如下:返回类型oper

3、ator运算符符号(参数表){函数体}若要将上述类complex的两个对象相加,只要编写一个运算符函数operator+(),如下所示:complexoperator+(complexom1,complexom2){complextemp;temp.real=om1.real+om2.real;temp.imag=om1.imag+om2.imag;returntemp;}那么total=com1+com2;将类complex的两个对象com1和com2相加。6.1.1运算符重载函数的定义(1)重载功能应当与原有功能相类似;(2)程序员不能臆造新

4、的运算符来扩充C++语言;(3)“.”、“*”、“::”、sizeof和“?:”这五个运算符不能重载;(4)不能改变运算符的操作个数;(5)不能改变运算符原有的优先级;(6)不能改变原有的结合性;(7)不能改变运算符对预定义类型数据的操作方式。6.1.2运算符重载的规则运算符重载一般采用如下二种形式:一是定义为它将要操作的类的成员函数,二是定义为类的友元函数。6.2运算符重载函数的两种形式1.友元运算符函数定义的语法形式友元运算符函数的原型在类的内部声明格式如下:classX{//…friend返回类型operator运算符(形参表);//…}在

5、类外定义友元运算符函数的格式如下:返回类型operator运算符(形参表){函数体}6.2.1友元运算符重载2.友元函数重载双目运算符当用友元函数重载双目运算符时,两个操作数都要传递给运算符函数。例6.2用友元运算符函数进行复数运算。6.2.1友元运算符重载#includeclasscomplex{public:complex(doubler=0,doublei=0){real=r;imag=i;}voidprint();friendcomplexoperator+(complexa,complexb);friendcom

6、plexoperator-(complexa,complexb);friendcomplexoperator*(complexa,complexb);friendcomplexoperator/(complexa,complexb);private:doublereal;doubleimag;};6.2.1友元运算符重载complexoperator+(complexa,complexb){complextemp;temp.real=a.real+b.real;temp.imag=a.imag+b.imag;returntemp;}complex

7、operator-(complexa,complexb){complextemp;temp.real=a.real-b.real;temp.imag=a.imag-b.imag;returntemp;}complexoperator*(complexa,complexb){complextemp;temp.real=a.real*b.real-a.imag*b.imag;temp.imag=a.real*b.imag+a.imag*b.real;returntemp;}6.2.1友元运算符重载complexoperator/(complexa,c

8、omplexb){complextemp;doublet;t=1/(b.real*b.real+b.imag*b.imag);temp.

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

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

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