и выполнения, тогда как компил

Автор admin Суббота, 20 июня 2009 11:32

и выполнения, тогда как компилятор в обычном случае должен знать точный тип на стадии компиляции (еще одна причина, позволяющая говорить об успешной имитации виртуальных конструкторов). Виртуальный конструктор использует свой аргумент для выбора реального конструируемого объекта («письма»), указатель на который затем присваивается переменной «конверта». В этой точке конструирование «письма» уже завершено, поэтому любые виртуальные вызовы будут должным образом перенаправлены. В качестве примера рассмотрим вызов draw() в виртуальном конструкторе. Если трассировать этот вызов (вручную или с помощью отладчика), вы увидите, что он начинается с функции draw() базового класса Shape. Эта функция вызывает draw() для хранящегося в «конверте» указателя s на «письмо». Все типы, производные от Shape, обладают одинаковым интерфейсом, поэтому виртуальный вызов будет правильно выполнен, хотя он вроде бы находится в конструкторе (в действительности конструктор «письма» уже был завершен). Пока виртуальные вызовы в базовом классе просто вызывают идентичные виртуальные функции через указатель на «письмо», система будет раб


Комментарии закрыты.