类的使用

//运算符重载operator+()等
#ifndef MYTIME_H_
#define MYTIME_H_

class Time
{
public:
    Time();
    Time(int h, int m = 0);
    void AddMin(int m);
    void AddHr(int n);
    void Reset(int h = 0, int n = 0);
    //如果想进行“+”的重载,只需要将sum换成operator+(),重载不能违反其他操作符的使用,使用时可以使用函数也可以直接使用“+”
    Time sum(const Time& t) const;
    Time operator+(const Time& t) const;
    Time operator-(const Time& t) const;
    Time operator*(double n) const;
    void Show() const;
    ~Time();

    /*C++除了使用公有函数访问私有成员外还可以用友元,友元包括友元函数、友元类、友元成员函数,通过让函数成为类的友元即可访问
    友元函数的声明在函数声明中,加上关键字friend*/
    friend Time operator*(double m, const Time& t) { return t * m; }
    friend std::ostream& operator<<(std::ostream & os, const Time& t);

private:
    int hours;
    int minutes;

};

#endif // !MYTIME_H_
#include <iostream>
#include "mytime.h"

Time::Time() {
    hours = minutes = 0;
}

Time::Time(int h, int m) {
    hours = h;
    minutes = m;
}

Time::~Time() {

}

void Time::AddMin(int m) {
    minutes += m;
    hours += minutes / 60;
    minutes = minutes % 60;
}

void Time::AddHr(int h) {
    hours += h;
}

void Time::Reset(int h, int m) {
    hours = h;
    minutes = m;
}

Time Time::sum(const Time& t) const {
    Time sum;
    sum.minutes = minutes + t.minutes;
    sum.hours = hours + t.hours + sum.minutes / 60;
    sum.minutes = sum.minutes % 60;
    return sum;
}

Time Time::operator+(const Time& t) const {
    Time sum;
    sum.minutes = minutes + t.minutes;
    sum.hours = hours + t.hours + sum.minutes / 60;
    sum.minutes = sum.minutes % 60;
    return sum;
}

Time Time::operator-(const Time& t) const {
    Time diff;
    int tol1, tol2;
    tol1 = t.minutes + 60 * t.hours;
    tol2 = minutes + 60 * hours;
    diff.minutes = (tol2 - tol1) % 60;
    diff.hours = (tol2 - tol1) / 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;
}

std::ostream& operator<<(std::ostream& os, const Time& t) {
    os << t.hours << " hours," << t.minutes << " minnutes";
    return os;
}


void Time::Show() const {
    std::cout << hours << " hours," << minutes << " minutes" << std::endl;
}

 

posted @ 2023-04-16 17:23  夏蝉沐雪  阅读(12)  评论(0编辑  收藏  举报