一.运算符重载的概念
概念: 使原有的运算符赋予新的功能!
本质:函数重载
eg1: 用“+”符号一般用来做加法,但是也可以用来拼接字符串。下图中“+”、“=”、“<<”都进行了重载。
eg2:下图中我们可以让两个坐标相加得到一个新坐标,但是“+”本身并不具备这样的功能,可以通过运算符重载来让“+"有这样的功能;我们想直接输出一个坐标也可以通过重载输出运算符来实现
二.一元运算符重载的方法
关键字:operator
1.一元运算符——“-”的重载
成员函数的重载:首先要定义要定义一下如图一,然后实现的时候返回this指针就好了。最后使用的时候首先要实例化对象然后直接用“-”就好了,相当于调用了函数。
友元函数重载:
2.一元运算符——“++”的重载
a.前置++的重载(成员函数)
b.后置++:(int)是标识,表示是后置++,并没有什么实际意义!
三.二元运算符的重载
1.二元运算符“+”的重载
a.成员函数重载
b.友元函数重载
2.二元运算符——“<<”的重载(输出运算符)
a.友元函数重载
注意:输出运算符不能使用成员函数重载,因为成员函数重载的第一个参数要求是当前的对象,但是输出运算符第一个对象必须是ostream的!
3.二元运算符——“[]”的重载(索引运算符)
a.成员函数重载
注意:索引运算符不可以采用友元函数重载,友元函数重载第一个参数可以是成员函数重载中的那个this指针也可以是其他值,可是对于索引运算符来说第一个参数必须是this指针,这样才能传入索引,才能表达这个索引是当前的这个对象的数据的索引!
4.代码实例
#include <iostream>
using namespace std;
/**
* 定义Coordinate类
* 数据成员:m_iX,m_iY
* 成员函数:构造函数
* 重载--运算符,重载+运算符
*/
class Coordinate
{
public:
Coordinate(int x, int y)
{
m_iX = x;
m_iY = y;
}
// 前置--运算符重载
Coordinate& operator--() //前置--
{
m_iX--;
m_iY--;
return *this;
}
// 后置--运算符重载
Coordinate& operator--(int)//后置--
{
Coordinate old(*this);
m_iX--;
m_iY--;
return old;
}
// +号运算符重载
Coordinate operator+(const Coordinate &coor)
{
Coordinate temp(0,0);
temp.m_iX = this->m_iX + coor.m_iX;
temp.m_iY = this->m_iY + coor.m_iY;
return temp;
}
public:
int m_iX;
int m_iY;
};
int main(void)
{
Coordinate coor1(1, 3);
Coordinate coor2(2, 4);
Coordinate coor3(0, 0);
coor1--;
--coor2;
coor3 = coor1 + coor2;
cout << coor3.m_iX << endl;
cout << coor3.m_iY << endl;
system("pause");
return 0;
}