fms (22.11.2009 00:03, просмотров: 110) ответил megajohn на а в итоге, эта таблица виртуальных функций как реализуется компилятором ? Подсавит или создаст и проиннициализирует указатели ?
Не совсем вопрос понял. Если вы о механизме реализации виртуальных функций - то да, компилятор создаст и проинициализирует таблицу виртуальных функций. При этом виртуальная функция не обязательно будет вызвана через таблицу.
class Uart {
public:
virtual void put(char c)=0;
};
class Uart1: public Uart {
public:
virtual void put(char c) {}
};
int main(){
Uart1 u1;
Uart* u = &u1;
// Вызов через таблицу виртуальных функций
u->put(1);
// Обычный вызов функции-члена класса
u1.put(1);
}
В первом случае используется механизм вызова виртуальных функций, во втором компилятор "знает" какому классу принадлежит объект и использует непосредственный вызов.