C++运算符重载函数作为类成员函数和友元函数

上传人:cn****1 文档编号:470822248 上传时间:2023-11-30 格式:DOC 页数:11 大小:61KB
返回 下载 相关 举报
C++运算符重载函数作为类成员函数和友元函数_第1页
第1页 / 共11页
C++运算符重载函数作为类成员函数和友元函数_第2页
第2页 / 共11页
C++运算符重载函数作为类成员函数和友元函数_第3页
第3页 / 共11页
C++运算符重载函数作为类成员函数和友元函数_第4页
第4页 / 共11页
C++运算符重载函数作为类成员函数和友元函数_第5页
第5页 / 共11页
点击查看更多>>
资源描述

《C++运算符重载函数作为类成员函数和友元函数》由会员分享,可在线阅读,更多相关《C++运算符重载函数作为类成员函数和友元函数(11页珍藏版)》请在金锄头文库上搜索。

1、-C+运算符重载的方法运算符重载的方法是定义一个重载运算符的函数,在需要执行被重载的运算符时,系统就自动调用该函数,以实现相应的运算。也就是说,运算符重载是通过定义函数实现的。运算符重载实质上是函数的重载。重载运算符的函数一般格式如下:函数类型 operator 运算符名称 (形参表列) / 对运算符的重载处理 例如,想将”+”用于ple*类(复数)的加法运算,函数的原型可以是这样的: ple* operator+ (ple*& c1,ple*& c2);在上面的一般格式中,operator是关键字,是专门用于定义重载运算符的函数的,运算符名称就是C+提供给用户的预定义运算符。注意,函数名是由

2、operator和运算符组成,上面的operator+就是函数名,意思是“对运算符+重载”。只要掌握这点,就可以发现,这类函数和其他函数在形式上没有什么区别。两个形参是ple*类对象的引用,要参为ple*类对象。在定义了重载运算符的函数后,可以说,函数operator +重载了运算符+。在执行复数相加的表达式c1 + c2时(假设c1和c2都已被定义为ple*类对象),系统就会调用operator+函数,把c1和c2作为实参,与形参进行虚实结合。为了说明在运算符重载后,执行表达式就是调用函数的过程,可以把两个整数相加也想像为调用下面的函数:int operator + (int a,int b

3、) return (a+b);如果有表达式5+8,就调用此函数,将5和8作为调用函数时的实参,函数的返回值为13。这就是用函数的方法理解运算符。可以在例10.1程序的基础上重载运算符“+”,使之用于复数相加。例10.2 改写例10.1,重载运算符“+”,使之能用于两个复数相加。1. *include2. usingnamespace std;3. class ple*4. 5. public:6. ple*()real=0;imag=0;7. ple*(double r,double i)real=r;imag=i;8. ple* operator+(ple* &c2);/声明重载运算符的函数

4、9. voiddisplay();10. private:11. double real;12. double imag;13. ;14. ple* ple*:operator+(ple* &c2)/定义重载运算符的函数15. 16. ple* c;17. c.real=real+c2.real;18. c.imag=imag+c2.imag;19. return c;20. 21. void ple*:display()22. 23. cout(real,imagi)endl;24. 25. intmain()26. 27. ple* c1(3,4),c2(5,-10),c3;28. c3=

5、c1+c2;/运算符+用于复数运算29. coutc1=;c1.display();30. coutc2=;c2.display();31. cout”和“ ”运算符重载为“小于”运算。但这样违背了运算符重载的初衷,非但没有提髙可读性,反而使人莫名其妙,无法理解程序。应当使重载运算符的功能类似于该运算符作用于标准类型数据时所实现的功能(如用“+”实现加法,用“”实现“大于”的关系运算)。9) 运算符重载函数可以是类的成员函数,也可以是类的友元函数,还可以是既非类的成员函数也不是友元函敝的普通函数。以上这些规则是很容易理解的,不必死记。把它们集中在一起介绍,只是为了使读者有一个整体的概念,也便于

6、查阅。C+允许重载的运算符和不允许重载的运算符C+中绝大部分的运算符允许重载,具体规定见表10.1。表10.1 C+允许重载的运算符双目算术运算符+ (加),-(减),*(乘),/(除),%(取模)关系运算符=(等于),!= (不等于), (大于,=(大于等于)逻辑运算符|(逻辑或),&(逻辑与),!(逻辑非)单目运算符+ (正),-(负),*(指针),&(取地址)自增自减运算符+(自增),-(自减)位运算符| (按位或),& (按位与),(按位取反),(按位异或),,(右移)赋值运算符=, +=, -=, *=, /= , % = , &=, |=, =, =空间申请与释放new, dele

7、te, new , delete其他运算符()(函数调用),-(成员访问),-*(成员指针访问),,(逗号),(下标)不能重载的运算符只有5个:. (成员访问运算符).* (成员指针访问运算符): (域运算符)sizeof (长度运算符): (条件运算符)前两个运算符不能重载是为了保证访问成员的功能不能被改变,域运算符和sizeof 运算符的运算对象是类型而不是变量或一般表达式,不具备重载的特征。C+运算符重载函数作为类成员函数和友元函数例10.2中对运算符“+”进行了重载,使之能用于两个复数的相加。在该例中运算符重载函数operator+作为ple*类中的成员函数。可能有的读者会提出这样的问

8、题:”+“是双目运算符,为什么在例10.2程序中的重载函数中只有一个参数呢?实际上,运算符重载函数有两个参数,由于重载函数是ple*类中的成员函数,有一个参数是隐含的,运算符函数是用this指针隐式地访问类对象的成员。可以看到,重载函数operator+访问了两个对象中的成员,一个是this指针指向的对象中的成员,一个是形参对象中的成员。如this-real+c2.real,this-real就是c1.real。上节中已说明,在将运算符函数重载为成员函数后,如果出现含该运算符的表达式,如c1+c2,编译系统把它解释为: c1.operator+(c2)即通过对象c1调用运算符重载函数,并以表达式中第二个参数(运算

展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 建筑/环境 > 施工组织

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号