2012-11-20 3 views
0

C++에서 클래스의 다른 멤버 함수에서 오버로드 된 연산자를 호출하는 방법은 무엇입니까? 클래스가, 말, int 형 매개 변수를 (예를 들어, T &operator[](int index);) 소요 operator[]의 과부하를 가지고, 그래서 만약오버로드 된 연산자를 어떻게 적용합니까?

+4

의미를 설명하기 위해 몇 가지 코드를 보여주십시오. 이렇게 묻는 질문은 의미있는 대답을 얻지 못할 것입니다. –

+0

운영자는 회원입니까? – juanchopanza

답변

6

가 구성원으로 과부하가있어 가정하면, 일반적으로, (*this)operator<parameter(s)>를 사용, 다른 멤버 함수 (*this)[2]로 호출 할 수 있습니다.

무료 함수로 오버로드 된 경우 거의 동일한 종류의 작업을 수행합니다. 당신이 좋아하는 멤버 함수에서 호출 할 수

my_string operator+(my_string const &a, my_string const &b); 

: 예를 들어, 가정은 같은 무료 기능을 가진 케이스의 아주이 단순한에서

my_string operator+(my_string const &other) { 
    return (*this) + other; 
} 

아마 유용하지,하지만 여전히를 보여줍니다 일반적인 생각.

1

귀하의 질문은 상당히 모호하지만, 그 세 subanswers 중 하나가 작동합니다 :

때마다 당신이 어떤 (비 정적) 멤버 함수 내에서 this를 사용하려는 당신이 그것을 할 수 있습니다

class A { 
    int b; 

    void foo() { 
     this->b; 
    } 

    void bar() { 
     foo(); // Those calls are the same 
     this->foo(); 

     this->b; 
    } 
} 

C++ 소요 같은 개체 인 this에 대해주의하십시오. 당신이 operator+= 같은 오버로드 된 연산자를 호출 할 때


, 당신은 할 수 있습니다

void foo() 
{ 
    *this += bar; 
    (*this)[bar]; // for operator[] 
} 

을 그리고 당신은 부모 클래스의 연산자를 호출 할 필요가있는 경우 :

class A, public Base { 

    void foo() 
    { 
     this->Base::operator+= bar; // Equivalent syntax again 
     ((Base)*this) += bar; 
    } 
} 
0

오버로드 된 연산자가 자동으로 호출되며 명시 적 호출이 필요 없습니다. 다음은 연산자 오버로딩의 간단한 예입니다.

class MyNumber 
{ 
private: 
    int number_; 

public: 
    MyNumber() : number_(0) { } 

    MyNumber& operator++() // prefix 
    { 
     ++number_; 
     return *this; 
    } 

    MyNumber operator++(int) // postfix 
    { 
     MyNumber result = *this; 
     ++number_; // Calls this->operator++(void); 
     return result; 
    } 
}; 

int main(void) 
{ 
    MyNumber number; 
    number++; 
    ++number; 
    return 0; 
} 
관련 문제