#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; }
};

Cents operator + (const Cents &c1, const Cents &c2)
{
    return Cents(c1.getCents() + c2.getCents());
}

int main()
{
    Cents cents1(6);
    Cents cents2(8);
    
    // cout << add(cents1,cents2).getCents() << "\n"; Cents add() 일 경우.
    cout << (cents1+cents2 + Cents(6)).getCents() << "\n"; //익명 객체 사용
    
}

Friend 활용

#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; }
    
    friend Cents operator + (const &c1, oncst &c2)
    {
        return Cents(c1.getCents() + c2.getCents());
    }
};

//Cents operator + (const Cents &c1, const Cents &c2)
//{
//    return Cents(c1.getCents() + c2.getCents());
//}

int main()
{
    Cents cents1(6);
    Cents cents2(8);
    
    // cout << add(cents1,cents2).getCents() << "\n"; Cents add() 일 경우.
    cout << (cents1+cents2 + Cents(6)).getCents() << "\n"; //익명 객체 사용
    
    
    // ?: :: sizeof . .* 연산자 오버로딩 X
    
}

Member로 선언

#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; }
    
    Cents operator + (const &c2)
    {
        return Cents(this->getCents() + c2.getCents()); // too many parameter라고 에러가 뜨므로 this를 활용
    }
};

//Cents operator + (const Cents &c1, const Cents &c2)
//{
//    return Cents(c1.getCents() + c2.getCents());
//}

int main()
{
    Cents cents1(6);
    Cents cents2(8);
    
    // cout << add(cents1,cents2).getCents() << "\n"; Cents add() 일 경우.
    cout << (cents1+cents2 + Cents(6)).getCents() << "\n"; //익명 객체 사용
    
    
    // ?: :: sizeof . .* 연산자 오버로딩 X
    
}