2014-02-12 2 views
1

문자열 클래스에서 공개적으로 상속 된 하나의 새 클래스를 만들었습니다. 파생 클래스에서 < (보다 작음) 연산자를 오버로드하고 싶습니다. 하지만 오버로드 된 함수로부터 부모 클래스 인 < 연산자를 호출해야합니다. 이 함수를 호출하는 구문은 무엇입니까? 가능한 경우 멤버 함수로 연산자를 구현하고 싶습니다.오버로드 된 함수에서 부모 클래스 멤버 함수를 호출하는 방법은 무엇입니까?

자바에서는 super이라는 키워드가 있습니다.

내 코드는 아래와 같습니다.

bool operator<(const mystring ms) 
{ 
    //some stmt; 
    //some stmt; 
    return string::operator<(ms); 
} 

아아, std::string 때문에 operator< 작동하지 않는 멤버 함수되지 않은 : 당신이 재미있는 이름을 가진 단지 함수 것을 깨닫게 경우 기본 클래스 operawtor를 호출

#include<iostream> 
#include<string> 
using namespace std;  
class mystring:public string 
    { 
    bool operator<(const mystring ms) 
    { 
     //some stmt; 
     //some stmt; 
     //call the overloaded <(less than)operator in the string class and return the value 
     } 

    }; 
+0

가'string''표준 : string'? –

+0

예 std :: string –

+0

링크를 제공해 주셔서 감사합니다. 부모 클래스에서보다 작음 연산자를 호출하는 구문이 필요합니다. –

답변

1

operator<위한 무료 함수 템플릿이 작동 std::stringoperator<의 멤버 과부하가없는,이된다 std::string에 있습니다. operator<을 무료로 사용하도록 고려해야합니다. std::string에서 작동하는 operator<으로 전화를 걸려면 참조를 사용하십시오.

예컨대 :

const std::string& left = *this; 
const std::string& right = ms; 
return left < right; 
+0

대단히 감사합니다! 이 하나가 완벽하게 작동합니다. 더 많은 질문에 대답 해 주실 수 있겠습니까? 자유 함수 템플릿이라면 기본적으로 mystring에서도 작동해야합니다. 그러나 mystr에서 operator

+0

@AbleJohnson : 컴파일러는 어떤 오류를 나타내며이 오류를 나타내는 코드는 실제로 어떻게 생겼습니까? –

+0

'#include #include using namespace std; 클래스 mystring : public string { \t }}; int main() { \t mystring a, b; \t cout << a

1

쉽게 , 그러나 자유로운 기능. 뭔가 같은 :

namespace std 
{ 
    bool operator<(const string &a, const string &b); 
} 

근거 동일, 재미있는라는 이름의 함수를 호출 :

bool operator<(const mystring ms) 
{ 
    //some stmt; 
    //some stmt; 
    operator<(*this, ms); 
} 
+0

'std :: string'은'operator <'멤버를 가지고 있지 않습니다. –

+0

나는 시도했다 : 오류 : 'operator <'는 'std :: string {aka std :: basic_string }'의 구성원이 아니다. –

+0

Ops! 당신 말이 맞아요, 그것은 자유로운 기능입니다! 회원이 아닙니다! 답변 정정 ... – rodrigo

관련 문제