2011-04-08 2 views
1

클래스가 부모로부터 상속 받기 때문에 이름이 같지만 매개 변수가 다르기 때문에 컴파일러에서 경고를 숨기고 있습니다.함수 지움 기능 C++에서 컴파일러 경고 숨기기

이 함수가 파생 클래스에 대한 기본 클래스 함수의 매개 변수와 이름과 일치하는 (이 경고가없는) 기본 클래스에서는 아무 것도 수행하지 않는다는 경고를 단순히 내 보냅니다. 이 컴파일러 경고. 이 파생 클래스에 대한 잠재적 노크 - 온 효과는 무엇입니까?

편집 : 기본 클래스 기능을 사용할 수 없기를 바란다고 가정합니다. (묻지 마세요).

답변

1

사용자가 명시 적으로 쓸모없이 유도 된 인스턴스를 통해 기본 클래스 함수에 액세스 할 수 없으므로 가능성이 낮습니다.

함수 서명을 대신 일치 시키거나 함수 이름을 변경하십시오.

using Base::Function; 

예 :

class Base 
{ 
public: 
    void Function(int) { cout << "Function(int)" << endl; } 
}; 

class Derived : public Base 
{ 
public: 
    using Base::Function; //NOTE THIS LINE : Unhiding base class function! 
    void Function(const char *) { cout << "Function(const char *)" << endl; } 
}; 

Derived d; 
d.Function(10); //this calls Base::Function 

데모 : http://ideone.com/OTBxg

+0

나는 더 구체적 이어야만했습니다. 기본 클래스 함수는 아무 것도 수행하지 않고 실제로 가상해야하지만 라이브러리를 변경할 수있는 권한이 없습니다. 전화가 안되는지 확인해야합니다. – deworde

+0

@deworde : "호출되지 않았는지"확인할 수는 없지만 파생 클래스에 숨기기 정의를 제공하면 도움이 될 수 있습니다. –

0

당신은 같은 파생 클래스에서 기본 클래스 기능을 숨기기를 해제 할 필요가 기본 클래스의 함수 그게 경고가 말하는거야! :-)

일반적으로 이것은 실수이므로 경고합니다. 그것이 의도적이라면 괜찮습니다 (그러나 매우 드뭅니다).

+0

나는 더 구체적 이어야만했습니다. 기본 클래스 함수는 아무 것도 수행하지 않고 실제로 가상해야하지만 라이브러리를 변경할 수있는 권한이 없습니다. 전화가 안되는지 확인해야합니다. – deworde

+0

@ deeworde : 문제를 조금 더 잘 이해할 수 있도록 코드를 게시 해보십시오. – Nawaz

2

이름을 재정의 파생 클래스 효과적으로 숨 깁니다에서