Если у меня есть следующий код:
#include <iostream>
class Base
{
public:
void Call(){std::cout << "Base";}
};
class Derived: public Base
{
public:
void Call(){std::cout << "Derived";}
};
int main() {
Base *base = new Base;
static_cast<Derived*>(base)->Call();
return 0;
}
Вызов будет в Derived::Call()
Однако, если я сделаю функцию Call () в Базовом классе виртуальной
#include <iostream>
class Base
{
public:
virtual void Call(){std::cout << "Base";}
};
class Derived: public Base
{
public:
void Call(){std::cout << "Derived";}
};
int main() {
Base *base = new Base;
static_cast<Derived*>(base)->Call();
return 0;
}
Звонит Base::Call()
.
Как виртуальная функция в базовом классе влияет на static_cast?