Когда именно компилятор создает таблицу виртуальных функций?
1), когда класс содержит хотя бы одну виртуальную функцию.
ИЛИ
2), когда непосредственный базовый класс содержит хотя бы одну виртуальную функцию.
ИЛИ
3), если любой родительский класс на любом уровне иерархии содержит по крайней мере одну виртуальную функцию.
Связанный с этим вопрос: Можно ли отказаться от динамической отправки в иерархии С++?
например. рассмотрим следующий пример.
#include <iostream>
using namespace std;
class A {
public:
virtual void f();
};
class B: public A {
public:
void f();
};
class C: public B {
public:
void f();
};
Какие классы будут содержать V-таблицу?
Так как B не объявляет f() как виртуальный, то класс C получает динамический полиморфизм?