프로그래밍/Effective c++
33. 상속된 이름을 숨기는 것은 피하자.
CuriousBear
2016. 3. 10. 16:40
class Base {
private:
int x;
public:
virtual void mf1() = 0;
virtual void mf1(int i = 0) ;
};
class Derived: public Base
{
public:
virtual void mf1();
};
이와같이 선언하면, Derived클래스에서 mf1(2)를 호출해도 Derived의 mf1이라는 이름이 Base의 그것을 덮어버렸기 때문에 더이상 Derived의 범위에서 mf1(int)함수는 존재하지 않는다.
이런 경우
다음과 같이 해결한다.
class Derived: public Base
{
public:
using Base::mf1;
virtual void mf1();
};
Base클래스를 private로 상속한 경우에는 using을 쓸 수 없는데, 다음과 같이 해결하기도 한다.
class Derived: private Base {
public:
virtual void mf1()
{ Base::mf1(); }
};