函数类型 operator 运算符名称 (参数列表)
{
对运算符的重载处理
}
例如:
没有重载前
#include
using namespace std;
class Time {
public:
Time(int year, int month, int day) : m_year(year), m_month(month), m_day(day)
{ }
Time();
Time time_add(Time& t);
void time_print();
private:
int m_year;
int m_month;
int m_day;
};
Time::Time(){}
Time Time::time_add(Time& d) {
Time ret;
ret.m_year = m_year + d.m_year;
ret.m_month = m_month + d.m_month;
ret.m_day = m_day + d.m_day;
return ret;
}
void Time::time_print() {
cout << m_year << " : " << m_month << " : " << m_day << endl;;
}
int main() {
Time a(1, 1, 1), b(2, 2, 2), c(3, 3, 3), d;
d = b.time_add(c);
d = a.time_add(d);
d.time_print();
return 0;
}
//可以看到实现一个加法十分麻烦,可读性低
重载后
#include
using namespace std;
class Time {
public:
Time(int year, int month, int day) : m_year(year), m_month(month), m_day(day)
{ }
Time();
Time operator+(Time& d);
void time_print();
private:
int m_year;
int m_month;
int m_day;
};
Time::Time(){}
Time Time::operator+(Time& d) {
Time ret;
ret.m_year = m_year + d.m_year;
ret.m_month = m_month + d.m_month;
ret.m_day = m_day + d.m_day;
return ret;
}
void Time::time_print() {
cout << m_year << " : " << m_month << " : " << m_day << endl;;
}
int main() {
Time a(1, 1, 1), b(2, 2, 2), c(3, 3, 3), d;
d = a + b + c;
d.time_print();
return 0;
}
//可以看到重载后代码阅读性提高特别多,修改起来也更加方便。
原因:由于重载的是类中的成员函数,有this指针隐式访问了类中的成员。
#include
using namespace std;
class Time {
public:
Time(int year, int month, int day) : m_year(year), m_month(month), m_day(day)
{ }
Time();
friend Time operator+(Time& a, Time& b);
void time_print();
private:
int m_year;
int m_month;
int m_day;
};
Time::Time(){}
Time operator + (Time & a,Time & b) {
return Time(a.m_year + b.m_year, a.m_month + b.m_month, a.m_day + b.m_day);
}
void Time::time_print() {
cout << m_year << " : " << m_month << " : " << m_day << endl;;
}
int main() {
Time a(1, 1, 1), b(2, 2, 2),d;
d = a + b;
d.time_print();
return 0;
}