= Time Header = A silly header which allows timestamps to be written in english. {{{c++ #pragma once #include enum timetype { _day, _hour, _minute, _second }; class Time { private: int _days = 0; int _hours = 0; int _minutes = 0; int _seconds = 0; public: Time() { }; Time(int n, timetype type); int to_seconds() const; friend std::ostream& operator<<(std::ostream&, const Time&); friend Time operator * (int, Time); Time operator + (const Time&); Time operator , (const Time& t) { return *this + t; } Time operator && (const Time& t) { return *this + t; } }; #define days * Time(1, _day) #define day days #define hours * Time(1, _hour) #define hour hours #define minutes * Time(1, _minute) #define minute minutes #define seconds * Time(1, _second) #define second seconds Time::Time(int n, timetype type) { switch (type) { case _day: this->_days = n; break; case _hour: this->_hours = n; break; case _minute: this->_minutes = n; break; break; case _second: this->_seconds = n; break; break; } } Time operator * (int s, Time t) { Time u; u._days = t._days * s; u._hours = t._hours * s; u._minutes = t._minutes * s; u._seconds = t._seconds * s; return u; } Time Time::operator + (const Time& t) { Time u; u._days = this->_days + t._days ; u._hours = this->_hours + t._hours ; u._minutes = this->_minutes + t._minutes; u._seconds = this->_seconds + t._seconds; return u; } int Time::to_seconds() const { return 60 * 60 * 24 * this->_days + 60 * 60 * this->_hours + 60 * this->_minutes + this->_seconds; } std::ostream& operator<<(std::ostream& out, const Time& time) { out << time.to_seconds() << " seconds"; return out; } /* -------------------------------------------------- */ int main() { std::cout << 5 days << std::endl << 7 minutes << std::endl << (5 days and 3 seconds) << std::endl << (7 days, 7 minutes and 3 seconds) << std::endl << (9 hours and 1 second) << std::endl ; } }}}