В какой момент заполняется матрица переходов (Таблица виртуальных функций)экземпляра класса-потомка?
Терминология с++: функция-член класса = метод
Мы все знаем, что переопределение функции-члена класса при использовании ключевого слова virtual
ведёт к тому, что метод, вызванный по ссылке или указателю экземпляра класса будет определяться в процессе выполнения программы(если я ничего не путаю, если вызывать по названию экземпляра, то этот механизм не работает, метод так же определяется на этапе компиляции). На всякий случай цитата из Праты 6 издание:
Без ключевого слова virtual программа выбирает метод, основываясь на типе ссьтки или указателя . Но если присутствует ключевое слово virtual , программа выбирает метод, основываясь на типе объекта, на который указывает ссылка или указатель.
Так вот механизм этот, под капотом, работает с помощью матрицы переходов - то есть, насколько я понял, у каждого экземпляра любого класса формируется своя матрица переходов с указателями на свои функции-члены класса.
- Верно ли я понимаю, что у базовых классов, или классов вне наследственной иерархии такая матрица формируется при компиляции?
- В какой момент исполнения программы такая матрица заполняется у экземпляров класса, которые унаследовали виртуальные функции-члены класса