2023/9/13
运算符重载
使用operator对运算符重载
能重载的运算符:
+ - * / % ^ & | ~= ! = < > += -= *= /= %= ^= &= |= << >> >>= <<= == != <= >= && || ++ -- , -> ->* () [] new delete new[] delete[]
mytime.h
#ifndef __MYTIME_H__
#define __MYTIME_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
mytime.cpp
#include "mytime.h"
#include <iostream>
Time::Time()
{
hours = 0;
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;
} // 操作符重载,定义在类中的操作符
void Time::show() const
{
std::cout << hours << " hours, " << minutes << " minutes." << std::endl;
}
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 t) const
{
Time res;
long totalMin = hours * t * 60 + minutes * t;
res.hours = totalMin / 60;
res.minutes = totalMin % 60;
return res;
}
usetime.cpp
#include "mytime.h"
#include <iostream>
using namespace std;
int main()
{
Time planning;
Time codeing(2, 40);
Time fixing(5, 55);
Time total;
cout << "Planning time = ";
planning.show();
cout << endl;
cout << "Codeing time = ";
codeing.show();
cout << endl;
cout << "fixing time = ";
fixing.show();
cout << endl;
total = codeing + fixing;
cout << "codeing + fixing = ";
total.show();
cout << endl;
Time moreFixing(3, 28);
// total = moreFixing.operator+(total);
total = total + moreFixing;
cout << "MoreFixing.operator+(total) = ";
total.show();
}