/* * C++ Operator Overloading * by Hans Schou * * Inspiration from * http://www.cplusplus.com/doc/tutorial/tut4-2.html * */ #include #include using namespace std; class CTimeval { public: struct timeval tv; CTimeval () {}; CTimeval (struct timeval *); CTimeval (int,int); CTimeval operator + (CTimeval); void operator += (CTimeval); CTimeval operator - (CTimeval); int operator > (CTimeval); int operator < (CTimeval); }; CTimeval::CTimeval (struct timeval *a) { memcpy(&tv, a, sizeof(tv)); } CTimeval::CTimeval (int sec, int usec) { tv.tv_sec = sec; tv.tv_usec = usec; } CTimeval CTimeval::operator + (CTimeval param) { CTimeval temp; temp.tv.tv_sec = tv.tv_sec + param.tv.tv_sec; temp.tv.tv_usec = tv.tv_usec + param.tv.tv_usec; if (temp.tv.tv_usec > 999999) { temp.tv.tv_usec -= 1000000; temp.tv.tv_sec++; } return (temp); } void CTimeval::operator += (CTimeval param) { tv.tv_sec += param.tv.tv_sec; tv.tv_usec += param.tv.tv_usec; if (tv.tv_usec > 999999) { tv.tv_usec -= 1000000; tv.tv_sec++; } } CTimeval CTimeval::operator - (CTimeval param) { CTimeval temp; temp.tv.tv_sec = tv.tv_sec - param.tv.tv_sec; temp.tv.tv_usec = tv.tv_usec - param.tv.tv_usec; if (temp.tv.tv_usec < 0) temp.tv.tv_usec += 1000000; return (temp); } int CTimeval::operator > (CTimeval param) { if (tv.tv_sec > param.tv.tv_sec) { return (1); } else { if (tv.tv_sec == param.tv.tv_sec && tv.tv_usec > param.tv.tv_usec) return (1); else return (0); } } int CTimeval::operator < (CTimeval param) { if (tv.tv_sec < param.tv.tv_sec) { return (1); } else { if (tv.tv_sec == param.tv.tv_sec && tv.tv_usec < param.tv.tv_usec) return (1); else return (0); } } int main (void) { CTimeval a ( &(struct timeval){3,3} ); CTimeval b ( 2, 2 ); CTimeval c; c = a + b; printf("%d.%06d\n", c.tv.tv_sec, c.tv.tv_usec); c = a - b; printf("%d.%06d\n", c.tv.tv_sec, c.tv.tv_usec); c = b - a; printf("%d.%06d\n", c.tv.tv_sec, c.tv.tv_usec); c = a; c += b; printf("%d.%06d\n", c.tv.tv_sec, c.tv.tv_usec); if (a > b) printf("a>b\n"); else printf("b>a\n"); if (a < b) printf("a