class B{
public:
void callFunc(); // 비가상 함수
};
class D : public B{
public:
void callFunc(); // B::callFunc를 가린다
}
D x;
B * pb = &x;
D * pd = &x;
pb->callFunc(); // B::callFunc()를 호출한다.
pd->callFunc(); // D::callFunc()를 호출한다.
- 비가상 함수
callFunc
를 파생 클래스에서 재정의 한다면 함수도 똑같고 객체도 똑같으나 실제로 호출이 다른 문제가 발생한다. public
상속에서is-a
관계에 모순이 발생한다.D
가B
의 일종이고callFunc
가 클래스 상속과는 상관없는B
의 불변동작에 해당한다면D
에서는callFunc
를 재정의할 생각을 하면 안된다.