Как работает вызов виртуального метода в C ++? - PullRequest
5 голосов
/ 27 сентября 2010

Как Виртуальный вызов метода работает в C ++?

Ответы [ 4 ]

7 голосов
/ 27 сентября 2010

Через виртуальные таблицы.

Прочитайте эту статью, http://en.wikipedia.org/wiki/Virtual_table.

Я мог бы объяснить это здесь, но википедия работает лучше, чем я.

5 голосов
/ 27 сентября 2010

Стандарт C ++ не определяет, как должен реализовываться механизм виртуальных функций.

Тем не менее, я думаю, что все текущие компиляторы C ++ используют виртуальные таблицы.
Обычный способ сделать это для классов, которые содержат хотя бы одну виртуальную функцию, чтобы иметь скрытый указатель на так называемую виртуальную таблицу,где адреса виртуальных функций для определенного класса вводятся в определенном для компилятора порядке.
Каждый конструктор затем устанавливает этот скрытый указатель на виртуальную таблицу класса, которому он принадлежит.

0 голосов
/ 23 февраля 2013

С VTables и функциональными указателями.Указатель на функцию виртуальных функций будет указан в VTableMFC использует карту сообщений вместо виртуальной функции, которая уменьшает ограничение размера.Если мы используем несколько виртуальных функций, VTable получит большой размер.

0 голосов
/ 27 сентября 2010

У каждого класса хотя бы с одним виртуальным методом есть виртуальная таблица - таблица указателей на функции, которые являются методами этого класса.

Он широко используется в COM.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...