От http://www.learncpp.com/cpp-tutorial/125-the-virtual-table/, код като напр
class Base
{
public:
virtual void function1() {};
virtual void function2() {};
};
class D1: public Base
{
public:
virtual void function1() {};
};
class D2: public Base
{
public:
virtual void function2() {};
};
генерира виртуална таблица, подобна на http://www.learncpp.com/images/CppTutorial/Section12/VTable.gif:
Виртуалната таблица като по-горе има смисъл. В крайна сметка обектите се нуждаят от начин за извикване на функции и трябва да използват указатели на функции, за да ги намерят.
Това, което не разбирам, е защо това се изисква само в случай на използване на виртуални функции? Определено пропускам нещо, тъй като виртуалната таблица не зависи директно от виртуалните функции.
Като пример, ако използваният код беше
class Base
{
public:
void function1() {};
void function2() {};
};
...
Base b;
b.function1();
и няма виртуална таблица (което означава, че няма указател към мястото, където се намира функцията), как ще се разреши извикването b.function1()
?
Или и в този случай имаме таблица, само че не се нарича виртуална таблица? В такъв случай ще възникне въпросът защо се нуждаем от нов вид таблица за виртуални функции?