运算符重载的限制

2021-04-13 16:06:07 浏览数 (1)

**

运算符重载比较实用,但是也存在许多的限制

** c 代码

其他重载运算符的运用 Time operator (const Time& t) const; Time operator-(const Time& t) const; Time operator*(double n) const;

代码语言:javascript复制
#include 
using namespace std;
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;
};
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";
}
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; // use operator ()
    total.Show();
    cout << endl;

    diff = weeding - waxing; // use operator-()
    cout << "weeding time - waxing time = ";
    diff.Show();
    cout << endl;

    adjusted = total * 1.5; // use operator*()
    cout << "adjusted work time = ";
    adjusted.Show();
    cout << endl;

    return 0;
}

程序输出

代码语言:javascript复制
weeding time = 4 hours, 35 minutes
waxing time = 2 hours, 47 minutes
total work time = 7 hours, 22 minutes
weeding time - waxing time = 1 hours, 48 minutes
adjusted work time = 11 hours, 3 minutes

0 人点赞