질문하기 전에 웹 검색을 시도했지만 어떤 용어를 사용해야하는지 잘 모르겠으며 문제에 대한 설명을 찾지 못했습니다. 이러한 대답은 allready 존재하는 경우가 여기에상속 된 멤버 함수의 매개 변수 유형에 따라 결정
을 :) 작은 샘플입니다에, 단지 날 지점 주시기 :
class IObject;
class ClassA;
class Base {
public: void Method(IObject * object) {}
};
class Derived : public Base {
public: void Method(ClassA * objet) {}
};
class IObject {};
class ClassA : public IObject {};
int main(int argc, char ** argv) {
IObject * object = new ClassA();
Derived derived;
derived.Method(object);
delete object;
return 0;
}
컴파일러가 파생 :: 방법을 사용하기 때문에이 컴파일되지 않습니다 버전의 메서드를 구현할 수 있습니다. 주어진 개체에 대해 완벽하게 유효한 Base :: Method가 있습니다.
이 컴파일 (작업을)하려면, 나는 파생에 다음을 추가해야 의도 한대로class Derived : public Base {
public:
// adding this line make the Base::Method visible to the compiler ??
using Base::Method;
void Method(ClassA * object) {}
};
이 줄을 추가 한 후, 모든 작품. 내가 이해하지 못하는 이유는 무엇입니까? Base :: Method를 Base :: BaseMethod로 이름을 바꾸면 파생 된 인스턴스에서 문제없이 호출 할 수 있습니다. 컴파일러가 매개 변수의 유형에 따라 올바른 메서드를 찾지 못하는 이유는 무엇입니까 ??
이제는 어떤 용어 (예 : "기능 숨기기")를 사용할지 알고 있으므로 답변과 중복 질문을 많이 발견했습니다. – Citron