Programming/C++ STL2014. 3. 4. 23:10
연산자 오버로딩은 2가지 방법으로 사용이 가능한데
1. 외부함수를 friend로 허용 (2항)
2. 내부함수로 구현(1항)


외부 함수의 경우 2개의 값이 있어야 연산이 가능하기에 인자가 두가지 들어가지만
내부 함수로 구현할 경우 자기 자신을 기준으로 다른 값을 연산하기에 하나의 값만 받게 된다.

#include < iostream >

using namespace std;

class temp
{
public:
        int a;

        temp(int b) : a(b) {}
        int operator+(int b, int c) { a += b; return a; }
};

int main(int argc, char **argv)
{
        temp tt(1);
        cout << tt + 3;

        return 0;
}

위 소스는 의도적으로 내부함수에 대해서 2개의 인자를 주고 생성한 것이라 에러가 발생한다.
VS2008
 error C2804: 이항 'operator +'에 매개 변수가 너무 많습니다.

G++
 error: ‘int temp::operator+(int, int)’ must take either zero or one argument 


정상작동하는 소스, int operator+는 멤버함수로 구현 friend int operator+는 외부함수/friend 로 구현
#include < iostream >

using namespace std;

class temp
{
public:
        int a;

        temp(int b) : a(b) {}
//      int operator+(int b) { a += b; return a; }
        friend int operator+(temp t, int b)
        {
                t.a = t.a + b;
                return t.a;
        }
};

int main(int argc, char **argv)
{
        temp tt(1);
        cout << tt + 3;

        return 0;
}

'Programming > C++ STL' 카테고리의 다른 글

오버로딩 / 오버라이딩  (0) 2014.03.10
try - throw - catch  (0) 2014.03.05
c++ explicit  (0) 2014.02.28
c++ class / const member variable & function  (0) 2014.02.28
deep copy / shallow copy < object copy  (0) 2014.02.27
Posted by 구차니