Программирование >>  Структурное программирование 

1 ... 226 227 228 [ 229 ] 230 231 232 ... 342


глава


Цели

Научиться использовать шаблоны функций для создания группы однотипных (перегруженных) функций.

Научиться различать шаблоны функций и шаблонные функции.

Научиться использовать шаблоны классов для создания группы связанных типов классов.

Научиться различать шаблоны класса и шаблонные классы.

Понять, как перегружать шаблонные функции.

Понять, как связаны между собой шаблоны, друзья, наследование и статические члены.



Резюме Терминология Типичные ошибки программирования Советы по повышению эффективности Замечания по технике программирования

Упражнения для самопроверки Ответы на упражнения для самопроверки

Упражнения

12.1. Введение

в этой главе мы обсудим одно из последних нововведений стандарта языка С-Н- - шаблоны. Шаблоны дают нам возможность определять при помощи одного фрагмента кода целый набор взаимосвязанных функций (перегруженных), называемых шаблонными функциями, или набор связанных классов, называемых шаблонными классами.

Мы можем написать один шаблон функции сортировки массива, на основе которого C-f-l- будет автоматически генерировать отдельные шаблонные функции, сортирующие массивы типов int, float, указателей на char * и т. д.

План

12.1. Введение

12.2. Шаблоны функций

12.3. Перегрузка шаблонных функций

12.4. Шаблоны классов

12.5. Шаблоны классов и нетиповые параметры

12.6. Шаблоны и наследование

12.7. Шаблоны и друзья

12.8. Шаблоны и статические элементы



12.2. Шаблоны функций

Перегруженные функции обычно используются для выполнения похожих операций над различными типами данных. Если же для каждого типа данных должны выполняться идентичные операции, то более компактным и удобным решением является использование шаблонов функций - возможности, появившейся в С++ сравнительно недавно. При этом программист должен написать всего одно описание шаблона функции. Основываясь на типах аргументов, использованных при вызове этой функции, компилятор будет автоматически генерировать объектные коды функций, обрабатывающих каждый тип данных. В языке С эта задача выполнялась при помощи макросов, определяемых директивой препроцессора #define. Однако, при использовании макросов компилятор не выполняет проверку соответствия типов, из-за чего нередко возникают серьезные побочные эффекты. Шаблоны функций, являясь таким же компактным решением, как и макросы, позволяют однако компилятору полностью контролировать соответствие типов.

Замечание по технике программирования 12.2

Шаблоны функций, как и макросы, позволяют создавать программное обеспечение, которое можно использовать повторно. Но в отличие от макросов шаблоны функций в С++ позволяют полностью контролировать соответствие типов.

Мы обсуждали шаблоны функций в главе 3. Для удобства тех читателей, которые пропустили этот момент, мы обсудим их еще раз и рассмотрим пример.

Достаточно описать один шаблон класса стеков, а затем С++ будет автоматически создавать отдельные шаблонные классы типа стек целых, стек вещественных чисел, стек указателей типа char * и т. д.

Обратите внимание на различие между шаблонами функций и шаблонными функциями: шаблоны функций и шаблоны классов являются своего рода трафаретами, при помощи которых вьгаерчивают кривые; шаблонные функции и шаблонные классы можно сравнить с такими кривыми, имеющими одну и ту же форму, но различающимися по цвету.

Замечание по технике программирования 12.1

Шаблоны являются еще одной из многочисленных возможностей С++ по созданию более универсального программного обеспечения, которое можно использовать повторно.

В этой главе будут представлены примеры шаблонов функций и шаблонов классов. Мы также рассмотрим связь между шаблонами и такими свойствами С++, как перегрузка, наследование, дружественность и статические элементы классов.

Идея и детали механизма шаблонов обсуждаются здесь на основе работы Бьерна Страуструппа Параметризованные типы в С++ , изданной в трудах конференции USENIX С++, которая проходила в Денвере, штат Колорадо в октябре 1988 г.



1 ... 226 227 228 [ 229 ] 230 231 232 ... 342

© 2006 - 2024 pmbk.ru. Генерация страницы: 0
При копировании материалов приветствуются ссылки.
Яндекс.Метрика