Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Абстрактный класс.docx
Скачиваний:
12
Добавлен:
25.03.2015
Размер:
42 Кб
Скачать

3. Параметризация и наследование

Шаблон является механизмом параметризации определения класса или функции произвольным типом. Код, реализующий шаблон, идентичен для всех типов параметров, также как и большая часть кода, использующая шаблон. Абстрактный класс определяет интерфейс. Большая часть кода различных реализаций абстрактного класса может совместно использовать в иерархии классов, и большинство фрагментов, использующих абстрактный класс, не зависит от его реализации. С точки зрения проектирования оба подхода настолько близки, что заслуживают общего названия. Так как оба метода позволяют выразить алгоритм один раз и использовать его со множеством типов, их вместе часто называютполиморфными. Для того чтобы всё-таки их различать, то, что обеспечивают виртуальные функции, называют полиморфизмом времени выполнений, а то, что предоставляют шаблоны, – полиморфизмом времени компиляции илипараметрическим полиморфизмом.

Итак, когда мы выбираем шаблон, а когда полагаемся на абстрактные классы? В любом случае мы работаем с объектами, которые совместно используют общий набор операций. Если между этими объектами не требуется иерархической зависимости, лучше использовать их в качестве аргументов шаблонов. Если фактические типы этих объектов не известны во время компиляции, их наилучшим представлением являются классы, производные от общего абстрактного класса. Если целью является эффективность на этапе выполнения, т.е. большое значение имеет встраивание операций, следует использовать шаблоны.