2010-08-04 9 views
9

나는 두 개의 구조체가 :C++ : 상속과 오버로드 연산자

template <typename T> 
struct Odp 
{ 
    T m_t; 

    T operator=(const T rhs) 
    { 
     return m_t = rhs; 
    } 
}; 

struct Ftw : public Odp<int> 
{ 
    bool operator==(const Ftw& rhs) 
    { 
     return m_t == rhs.m_t; 
    } 
}; 

내가 좋아하는 것을 컴파일하려면 다음

int main() 
{ 
    Odp<int> odp; 
    odp = 2; 

    Ftw f; 
    f = 2; // C2679: no operator could be found 
} 

이 일을 어떤 방법이 있나요, 아니면이를 정의해야합니다 연산자가 Ftw도 마찬가지입니까?

+0

보통'연산자 ='const를 참조 매개 변수를 ... 그것은'변경하는 것이 더 나은 것 T 연산자 = T 연산자 ='로 (const를 T 우)'(CONST : 당신은 사용하여 선언하여이를 번복 할 수 T & rhs)' – a1ex07

답변

22

컴파일러는 일반적으로 사용자가 제공하지 않는 한 operator=을 생성하며이 은 상속 된 것을 숨 깁니다.

struct Ftw : public Odp<int> 
{ 
    using Odp<int>::operator=; 
    bool operator==(const Ftw& rhs) 
    { 
     return m_t == rhs.m_t; 
    } 
}; 
+0

니스! 나는 그것에 대해 몰랐다. –