파생 클래스의 포인터를 상속 한 후에도 파생 클래스의 가상 메서드가 여전히 호출됩니다.이 메서드는 슬라이스가 발생 했어야했기 때문에 잘못되었습니다. 이 코드의 문제점에 대해 말씀해 주시겠습니까?파생 클래스의 가상 메서드가 업 캐스팅 후에 호출되는 이유는 무엇입니까?
class Base
{
public:
virtual void Hello() { cout << "Hello Base" << endl; }
};
class Derived: public Base
{
public:
void Hello() { cout << "Hello Derived" << endl; }
};
int main()
{
Derived* der = new Derived;
Base* base = dynamic_cast<Base*> (der);
if (base) base->Hello();
}
출력 : 안녕하세요 파생
다형성이 없으면 작동하지 않습니다. 동적 유형을 알 필요가 없으며 (여전히 파견 중임) 여기서 중요한 점이 있습니다. – Thilo
'Base'는 non-virtual * base * 클래스이기 때문에 동적 캐스트는 무의미합니다. 어쨋든, 기본 함수를 호출하고 싶다면'der-> Base :: Hello();'라고 말할 수 있습니다. –
여기에 슬라이스가 없습니다. –