Repository navigation
Expand file tree
/
Copy pathoperators.cpp
More file actions
71 lines (58 loc) · 1.62 KB
/
Copy pathoperators.cpp
File metadata and controls
71 lines (58 loc) · 1.62 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
#include <iostream>
class Duration {
private:
int minutes_;
int seconds_;
public:
Duration(int min, int sec) : minutes_(min), seconds_(sec){};
void print() {
std::cout << minutes_ << " m, " << seconds_ << " s"
<< "\n";
};
// member functions
explicit operator bool() { return minutes_ + seconds_ > 0; };
explicit operator int() { return minutes_ * 60 + seconds_; };
Duration& operator++() {
seconds_++;
if (seconds_ >= 60) minutes_ += 1;
return *this;
}
Duration operator+(const Duration& rhs) {
int m = minutes_ + rhs.minutes_;
int s = seconds_ + rhs.seconds_;
return Duration(m + s / 60, s % 60);
};
// alternative: declare as friend non-member function
// friend Duration operator+(const Duration& lhs, const Duration& rhs) {
// int m = lhs.minutes_ + rhs.minutes_;
// int s = lhs.seconds_ + rhs.seconds_;
// return Duration(m + s / 60, s % 60);
// };
// the same, but the right hand side is int
friend Duration operator+(const Duration& lhs, int seconds) {
int m = lhs.minutes_;
int s = lhs.seconds_ + seconds;
return Duration(m + s / 60, s % 60);
};
friend Duration operator+(int seconds, const Duration& lhs) {
int m = lhs.minutes_;
int s = lhs.seconds_ + seconds;
return Duration(m + s / 60, s % 60);
};
};
int main() {
Duration d1 = Duration(1, 10);
Duration d2 = Duration(3, 55);
++d1;
d1.print();
d2.print();
Duration sum = d1 + d2;
sum.print();
(sum + 60).print();
(60 + sum).print();
if (d1) {
std::cout << "Non zero\n";
}
// or static_cast<int>(d1)
std::cout << (int)(d1) << "\n";
}