История изменений
Исправление Kroz, (текущая версия) :
Как компилятор статически определит указатель в виртуальной таблице на speak если ссылка на dog инициализируется объектом потомка?
При объявлении виртуального метода, создается таблица с указателями на функции-методы. Эта таблица связана с конкретным объектом. Получается, чтобы вызвать метод speak, вызывается функция, на которую указывать первых (например) элемент таблицы виртуальных методов.
Если ты создал объект как new dog, то первый указатель таблицы будет указывать на dog::speak. Если ты создал объект как new dog_a, то первый указатель таблицы будет указывать на dog_a::speak.
Исходная версия Kroz, :
Как компилятор статически определит указатель в виртуальной таблице на speak если ссылка на dog инициализируется объектом потомка?
При объявлении виртуального метода, создается таблица с указателями на функции-методы. Эта таблица - часть объекта. получается, чтобы вызвать метод speak, вызывается функция, на которую указывать первых (например) элемент таблицы виртуальных методов.
Если ты создал объект как new dog, то первый указатель таблицы будет указывать на dog::speak. Если ты создал объект как new dog_a, то первый указатель таблицы будет указывать на dog_a::speak.