C++ 运算符重载

1 概念

所谓重载,就是重新赋予新的含义。函数重载就是对一个已有的函数赋予新的含义,使之实现新功能,因此,一个函数名就可以用来代表不同功能的函数,也就是”一名多用”。

运算符也可以重载。实际上,我们已经在不知不觉之中使用了运算符重载。例如,大 家都已习惯于用加法运算符”+”对整数、单精度数和双精度数进行加法运算,如5+8, 5.8 +3.67等,其实计算机对整数、单精度数和双精度数的加法操作过程是很不相同的, 但由于C++已经对运算符”+”进行了重载,所以就能适用于int, float, doUble类型的运算。

又如”<<“是C++的位运算中的位移运算符(左移),但在输出操作中又是与流对 象cout 配合使用的流插入运算符,”>>“也是位移运算符(右移),但在输入操作中又是与流对象 cin 配合使用的流提取运算符。这就是运算符重载(operator overloading)。C++系统对”<<“和”>>“进行了重载,用户在不同的场合下使用它们时,作用是不同 的。对”<<“和”>>“的重载处理是放在头文件stream中的。因此,如果要在程序中用”<< “和”>>”作流插入运算符和流提取运算符,必须在本文件模块中包含头文件stream(当然还应当包括”using namespace std“)。

2 运算符重载的限制

重载运算符函数可以对运算符作出新的解释,但是原有的基本语义不变:
1. 不改变运算符的优先级
2. 不改变运算符的结合性
3. 不改变运算符所需的操作数
4. 不创建新的运算符。

3 运算符重载编程基础

运算符重载的两种方法:成员函数或者友元函数重载。
关键在于成员函数有this指针,而友元函数没有this指针。

3.1 定义运算符重载函数名的步骤

全局函数、类成员函数方法实现运算符重载步骤
1)要承认操作符重载是一个函数,写出函数名称operator+ ()
2)根据操作数,写出函数参数
3)根据业务,完善函数返回值(看函数是返回引用 还是指针 元素),及实现函数业务

3.2 友元函数操作符重载

1)友元函数和成员函数选择方法
 当无法修改左操作数的类时,使用全局函数进行重载
 =, [], ()和->操作符只能通过成员函数进行重载

2)用友元函数 重载 << >>操作符
 istream 和 ostream 是 C++ 的预定义流类
 cin 是 istream 的对象,cout 是 ostream 的对象
 运算符 << 由ostream 重载为插入操作,用于输出基本类型数据
 运算符 >> 由 istream 重载为提取操作,用于输入基本类型数据
 用友员函数重载 << 和 >> ,输出和输入用户自定义的数据类型

a)用全局函数方法实现 << 操作符
ostream& operator<<(ostream &out, Complex &c1)
{
//out<<”12345,生活真是苦”<

猜你喜欢

转载自blog.csdn.net/qq_39818571/article/details/78443400