Keep in mind that you must choose one or the other form when defining a given operator,but not both.
加法:operator+
以class Time为例:
T1 = T2 + T3;
--> T1 = T2.operator+(T3); // member function
--> T1 = operator+(T2, T3); // nonmember function
member function:
class Time
{
private:
int hours;
int minutes;
public:
Time();
Time(int h, int m = 0);
Time operator+(const Time&) const;
//friend Time operator+(const Time&, const Time&); // the other form
void Show() const;
};
Time Time::operator+(const Time &t) const // implemention
{
Time temp;
temp.minutes = minutes + t.minutes;
temp.hours = hours + t.hours + temp.minutes/60;
temp.minutes %= 60;
return temp;
}
main.cpp 如下:
int main(void)
{
Time coding(2, 55);
Time fixing(5, 40);
Time total;
total = coding + fixing; // 1
total.Show();
total = coding.operator+(fixing); // 2
total.Show();
return 0;
}
nonmember function:
class Time
{
private:
int hours;
int minutes;
public:
Time();
Time(int h, int m = 0);
//Time operator+(const Time&) const; // the other form
friend Time operator+(const Time&, const Time&);
void Show() const;
};
Time operator+(const Time &t1, const Time &t2) // implemention
{
Time temp;
temp.minutes = t1.minutes + t2.minutes;
temp.hours = t1.hours + t2.hours + temp.minutes/60;
temp.minutes %= 60;
return temp;
}
main.cpp如下:
int main(void)
{
Time coding(2, 55);
Time fixing(5, 40);
Time total;
total = coding + fixing;
total.Show();
//total = coding.operator+(fixing); // error: 'class Time' has no member named 'operator+'
//total.Show();
return 0;
}