- 1、本文档共151页,可阅读全部内容。
- 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
5.1概念
5.2重载函数作为成员函数的情况
5.3重载函数作为友元函数的情况
5.4重载赋值运算符
5.5拷贝构造函数
5.6类型的转换
本章要点
练习
5.1概念
5.1.1运算符的重载
运算符的重载是通过编写函数来实现的。函数名必须由
关键字operator和紧跟其后的被重载的运算符组成。例如,若
要重载“+”运算符,则重载函数名为operator+;要重载“[]”
运算符,则重载函数名为operator[]。
有了函数名,要编写一个函数来实现我们要求的运算,
还需要有函数类型和函数参数。运算符有双目运算符和单目
运算符。根据重载函数的性质来分,有重载函数是成员函数
和重载函数是友元函数两类。根据被重载的运算符来分,有
双目运算符重载和单目运算符重载。
5.1.2运算符重载的限制
C++中提供的运算符重载机制,使程序更清晰,提高了
可读性。但C++对运算符重载作了一些限制。
(1)在运算符重载时不能改变运算符原来的优先级、结
合性和操作个数等性质。
(2)运算符=、()、[]和-的重载函数,可作为类的成员
函数,但不可作为友元函数。
(3)运算符重载函数的参数不能为空。
(4)当参加运算的对象都属内部类型时不能重载。
(5)对可重载的运算符作了限制,如表5-1所示。
表5-1运算符表
可重载的运算符
+-*/%^|
+=-=*=/=%=^==|=
++!||
--==!===~,
-*-[]()newdelete===
不可重载的运算符
.*和-成员指针运算符.分量运算符::?:sizeof
5.2重载函数作为成员函数的情况
5.2.1双目运算符的重载
双目运算符也称二元运算符,如+、-等。当重载函数作
为类的成员函数时,该函数可以少用一个参数,因为成员函
数隐藏了第一个参数——this指针。利用this指针就可完成当
前对象与重载函数中给出的对象之间的操作。
重载“+”运算符的方法是:Typeoperator-(Types),意
为当出现当前类的对象与函数参数给出的对象进行“-”运算
时就调用该函数。返回类型对该函数是否被调用没有影响,
理论上返回类型可以是任何类型,但一般总是设定为操作对
象的类型。
对于上面的operator-函数调用,可理解为程序中有d1-d2
的操作,“-”的左边是当前类的对象,右边是type的对象,
于是条件满足,就调用该函数。实际上这是在编译时就决定
了的,编译器读到d1-d2就将它理解为:this.operator-(d2)。
双目运算符-的左边是当前对象,右边是函数参数给出的对象。
所作的运算是,当前对象“-”函数参数给出的对象。因此要
注意先后次序。
【例5-1】将两个人民币对象相减,再赋给另一人民币
对象。由于相减之后还要赋值,因此要求重载函数返回值。
#includeiostream
usingnamespacestd;
classRMB
{public:
RMB(){yuan=0;jf=0;}
RMB(int,int);
RMBoperator-(RMB);
voidDisplay()
{cout(yuan+jf/100.0)endl;}
protected:
intyuan;intjf;
};
RMB::RMB(intd,intc)
{yuan=d;jf=c;
while(j
文档评论(0)