9.4 비교 연산자 오버로딩 하기
#include <iostream>
using namespace std;
class Cents
{
private:
int m_cents;
public:
Cents(int cents=0) { m_cents = cents; }
int getCents() const { return m_cents; }
int& getCents() { return m_cents; }
friend bool operator == (const Cents &c1, const Cents &c2) // !=도 가능
{
return c1.m_cents == c2.m_cents;
}
friend std::ostream& operator << (std::ostream &out, const Cents ¢s)
{
out << cents.m_cents;
return out;
}
};
int main()
{
Cents cents1(6);
Cents cents2(0);
if (cents1 == cents2)
cout << "Equal" << "\n";
return 0;
}
sorting에서 활용
#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;
class Cents
{
private:
int m_cents;
public:
Cents(int cents=0) { m_cents = cents; }
int getCents() const { return m_cents; }
int& getCents() { return m_cents; }
friend bool operator < (const Cents &c1, const Cents &c2) // sort 기본이 오름차순이므로 <를 정의해줘야함
{
return c1.m_cents < c2.m_cents;
}
friend std::ostream& operator << (std::ostream &out, const Cents ¢s)
{
out << cents.m_cents;
return out;
}
};
int main()
{
vector<Cents> arr(20);
for (unsigned i = 0; i<20;++i)
arr[i].getCents() = i;
std::random_shuffle(begin(arr),end(arr));
for (auto &e : arr)
cout << e << " ";
cout << "\n";
std::sort(begin(arr), end(arr)); // Cents들끼리 크기비교가 가능해야함. 크기 비교 연산자를 오버로딩을 해줘야함.
// C++ 17에서는 std::random_shuffle이 폐기.
// #include <random>
// std::random_device rd;
// std::mt19937 g(rd());
// std::shuffle(arr.begin(), arr.end(), g); 처럼 쓸 수 있음.
return 0;
}