которой бы вам не приходилось

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

которой бы вам не приходилось выбирать конкретный тип конструктора при созда- Фабрика 503 нии объекта. Другими словами, фабрике можно сказать: «Я не знаю точно, какой объект мне нужен, но вот тебе информация. Создай соответствующий тип». Однако при вызове конструктора механизм виртуального вызова не работает (происходит раннее связывание). Иногда это бывает неудобно. Например, в программе Shape было бы вполне логично выполнить всю подготовку в конструкторе Shape, а затем вывести фигуру вызовом draw(). Функция draw() должна быть виртуальной функцией, то есть сообщением классу Shape, приказывающим выполнить рисование конкретного типа фигуры, будь то Circle, Square или Line. Однако с конструктором такой вариант не проходит, потому что при вызове в конструкторах виртуальные функции заменяются «локальными» телами функций. Если вы хотите, чтобы виртуальная функция вызывалась из конструктора и делала то, что требуется, придется использовать методику имитации виртуального конструктора. Возникает крайне запутанная ситуация. Вспомните: виртуальные функции создаются для того, чтобы вы могли отправить сообщение


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