2014-10-16 3 views
0

,연산자 오버로드에서 함수 호출? 나는 클래스 A가

class A{ 

private: 
    int num; 
public: 
    A(int n){ num = n; }; 
    int getNum(){ 
     return num; 
    } 
    A operator+(const A &other){ 
     int newNum = num + other.getNum(); 
     return A(newNum); 
    }; 
}; 

other.getNum()가 오류를 주는가? 다른 변수 (other.num)에 액세스 할 수 있지만 다른 함수를 사용할 수없는 것 같습니다.

내가 오류가

잘못된 인수의 라인을 따라 뭔가 : 후보자는 getNum INT있다().

나는 int test = getNum()하지만 int test = other.getNum()을 쓸 수 있습니다,하지만 난 어떻게 든 other.getNum()를 호출 할 수있어 거의 확신합니다.

뭔가 내려다 보입니까?

+1

'기타'는 상수 참조이며, 'getNum'은 상수 멤버 함수가 아닙니다. – Claudio

+2

추천 읽기 : ** [어떤 컴퓨터 과학/프로그래밍 스택 교환을 게시합니까?] (http://meta.stackexchange.com/a/129632/165773) ** – gnat

답변

5

기타는 const로 표시됩니다. 따라서 const 메서드 만 호출 할 수 있습니다. 다른 non-const를 만들거나 getNum을 const 메소드로 만드십시오. 이 경우 getNum const를 만드는 것이 길일 것입니다.

getNumthis으로 호출 할 수있는 이유는 이것이 const가 아니기 때문입니다. 메소드 const를 효과적으로 만들면이 포인터가 const가됩니다.

+1

연산자 +는 const 여야합니다. 이것을 바꿔라. –