运算符重载的限制:
限制这么多 人生还有什么意义= =python倒是可以把+变- -变*之类的
示例代码:
mytime2.h
#ifndef MYTIME2_H_
#define MYTIME2_H_
class Time
{
private:
int hours;
int minutes;
public:
Time();
Time(int h, int m = 0);
void AddMin(int m);
void AddHr(int h);
void Reset(int h = 0, int m = 0);
Time operator+ (const Time & t) const;
Time operator- (const Time & t) const;
Time operator* (double n) const;
void Show() const;
};
#endif
mytime2.cpp
#include <iostream>
#include "mytime2.h"
Time::Time()
{
hours = minutes = 0;
}
Time::Time(int h, int m)
{
hours = h;
minutes = m;
}
void Time::AddMin(int m)
{
minutes = m;
hours += minutes / 60;
minutes %= 60;
}
void Time::AddHr(int h)
{
hours += h;
}
void Time::Reset(int h, int m)
{
hours = h;
minutes = m;
}
Time Time::operator+ (const Time & t) const
{
Time sum;
sum.minutes = minutes + t.minutes;
sum.hours = hours + t.hours + sum.minutes / 60;
sum.minutes %= 60;
return sum;
}
Time Time::operator- (const Time & t) const
{
Time diff;
int tot1, tot2;
tot1 = t.minutes + 60 * t.hours;
tot2 = minutes + 60 * hours;
diff.minutes = (tot2 -tot1 ) % 60;
diff.hours = (tot2 - tot1) / 60;
return diff;
}
Time Time::operator* (double mult) const
{
Time result;
long totalminutes = hours * mult * 60 + minutes * mult;
result.hours = totalminutes / 60;
result.minutes = totalminutes % 60;
return result;
}
void Time::Show() const
{
std::cout << hours << " hours, " << minutes << " minutes";
}
usetime2.cpp
#include <iostream>
#include "mytime2.h"
int main()
{
using std::cout;
using std::endl;
Time weeding(4, 35);
Time waxing(2, 47);
Time total;
Time diff;
Time adjusted;
cout << "weeding time = ";
weeding.Show();
cout << endl;
cout << "waxing time = ";
waxing.Show();
cout << endl;
cout << "total work time = ";
total = weeding + waxing;
total.Show();
cout << endl;
diff = weeding - waxing;
cout << "weeding time - waxing time = ";
diff.Show();
cout << endl;
adjusted = total * 1.5;
cout << "adjusted work time = ";
adjusted.Show();
cout << endl;
return 0;
}
友元(有缘= =)
友元函数
友元类
友元成员函数
处理外部函数调用类私有函数或对象
比如 Time * 1.5 改成 1.5 * Time
一般情况 Time::Time operator* (double n) const
这样的话就没办法适用1.5 * Time
所以需要友元函数来跟Time对象做做关系,让外部函数能够访问Time对象的成员函数或对象
关于<< 的重载
这种方法只能适用于简单的 cout << time;
但是如果碰到 cout << "abc" << time 就没用了
那咋办捏
这样写:
ostream & operator<< (ostream & os, Time & t)
{
.......
return os;
}