Home / utk / cs140 / sp19 / live_codings_in_lab / part1_concepts / operator_overload / friend.cpp
Directory Listing
basic.cpp
friend.cpp
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
#include <bits/stdc++.h>

using namespace std;

class thing {
	public:
		thing(const string& = "", const int & = 0);
		friend bool operator<(const thing &, const thing &);
		friend bool operator>(const thing &, const thing &);
		friend bool operator==(const thing &, const thing &);
		friend bool operator!=(const thing &, const thing &);
		friend thing& operator+=(thing &, const thing &);
		friend ostream& operator<<(ostream&, const thing &);

	private:
		string yes;
		int no;
};

thing::thing(const string& s, const int &i) {
	yes = s;
	no = i;
}

bool operator<(const thing &lhs, const thing &rhs) {
	return lhs.yes < rhs.yes;
}

bool operator>(const thing &lhs, const thing &rhs) {
	return lhs.yes > rhs.yes;
}

bool operator==(const thing &lhs, const thing &rhs) {
	return lhs.yes == rhs.yes;
}

bool operator!=(const thing &lhs, const thing &rhs) {
	return lhs.yes != rhs.yes;
}

thing& operator+=(thing &lhs, const thing &rhs) {
	lhs.yes += rhs.yes;

	return lhs;
}

//Tell ostream it's alright to access thing
ostream& operator<<(ostream& out, const thing &obj) {
	out << "{" << obj.yes << ", " << obj.no << "}";

	return out;
}

int main() {
	thing a1("a"), a2("a");

	cout << (a1 < a2) << endl;
	cout << (a1 > a2) << endl;
	cout << (a1 == a2) << endl;
	cout << (a1 != a2) << endl;

	thing a3;
	a3 += a2;
	a3 += a2;
	a3 += a2;
	a3 += a2;

	cout << a3 << endl;
}