本文共 2350 字,大约阅读时间需要 7 分钟。
运算符重载的限制:
限制这么多 人生还有什么意义= =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#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#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;
}
转载地址:http://fnepi.baihongyu.com/