Если у меня есть базовый класс:
struct Base
{
void foo()
{
bar();
}
virtual void bar()
{
}
};
И производный класс:
struct Derived : public Base
{
void bar()
{
cerr << "Derived here\n";
}
};
Бывает так, что когда пишешь этот код:
Derived d;
d.foo();
Я увижу печать «Получено здесь» - так как Derived::bar
был вызван. Но я не звонил через указатель на базу, а здесь работает полиморфизм. Зачем? Это потому, что вызов bar
в Base::foo
неявно фактически this->bar()
и bar
находится в vtable класса?