Из 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()
?
Или у нас и в этом случае есть таблица, просто она не называется виртуальной таблицей? В таком случае возник бы вопрос, зачем нужна таблица нового типа для виртуальных функций?