最初以为运算符重载没什么地方会用到,无奈随着接触到的东西越多,运算符重载反而出现得越来越多。
运算符重载一般有两种形式:
1. 类的成员函数形式;
2. 类的友元函数形式。
个人感觉实现为类的成员函数形式更好,因为感觉更“安全”。
而被重载的运算符中,单目运算符"++"、"--"有前置、后置之分:
后置:m++、m--;
前置:++m、--m。
前置同普通重载一样,后置在参数表最后加int申明。
重载定义代码及测试代码:
/******头文件******/
#include<iostream>
using namespace std;
/******重载定义********/
//友元函数重载
class Point1
{
private:
int x, y;
public:
Point1():x(0),y(0){}
friend Point1& operator ++(Point1& point1,int);
friend Point1& operator ++(Point1& point1);
};
//后置重载"++",for class Point1
Point1& operator ++(Point1& point1,int)
{
point1.x++;
point1.y++;
cout << "p1++" << endl;
return point1;
}
//前置重载"++",for class Point1
Point1& operator ++(Point1& point1)
{
++point1.x;
++point1.y;
cout << "++p2" << endl;
return point1;
}
//成员函数重载
class Point2
{
private:
int x, y;
public:
Point2() :x(0), y(0) {}
//后置重载"++",for class Point2
Point2& operator ++(int)
{
this->x++;
this->y++;
cout << "p2++" << endl;
return *this;
}
//前置重载"++",for class Point2
Point2& operator ++()
{
this->x++;
this->y++;
cout << "++p2" << endl;
return *this;
}
};
/******测试代码******/
int main()
{
Point1 p1;
p1++;
++p1;
Point2 p2;
p2++;
++p2;
system("pause");
return 0;
}