В C++, в процессе динамического связывания, рассмотрим следующий пример ...Механизм Vptr и виртуальные таблицы в C++
class Base
{
virtual void fun()
{
cout<<"Base";
}
};
class Derived : Base
{
void fun()
{
cout<<"Derived";
}
};
int main()
{
Base *bptr;
Derived d;
bptr=&d;
bptr->fun();
}
Выход выше функции «Производная» в связи с объявлением виртуального ключевого слова/динамический связывание.
Как я понял, будет создана виртуальная таблица (Vtable), которая содержит адрес виртуальных функций. В этом случае виртуальная таблица, созданная для производного класса, указывает на наследуемый виртуальный fun()
. И bptr->fun()
будет разрешаться до bptr->vptr->fun();
. Это указывает на функцию унаследованного базового класса. Я не совсем понимаю, как называется производная функция класса?
Обратите внимание, что это 'int main', а не' void main', а объявления классов должны заканчиваться символом ';'. –
Ответы ниже выглядят хорошо, но если вы чувствуете необходимость читать больше по этому вопросу, я бы рекомендовал [* Внутри объектной модели C++ *] (http://www.amazon.com/Inside-Object-Model-Stanley -Lippman/dp/0201834545 /) (ISBN: 978-0201834543). –