Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Шпора 57стр.doc
Скачиваний:
54
Добавлен:
15.06.2014
Размер:
478.21 Кб
Скачать

Вопрос 32. Шаблоны классов и пользовательские типы

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

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

Параметризированный класс – некоторый шаблон, на основе к-го можно строить другие классы. Этот класс можно рассматривать как некоторое описание множества классов, отличающиеся только типами их данных. Для обеспечения параметрич полиморфизма используется ключ слово template. Параметрический полиморфизм позволяет использовать один и тот же код относит разных типов.

Для того, чтобы использовать шаблонные классы, достаточно один раз описать шаблон класса. Шаблон класса Stack, например, может служить основой для создания многочисленных классов Stack необходимых программе типов (таких, например, как *Stack для данных типа float>>, <*Stack для данных типа int*, <<Stack для данных типа char* и т. д.).

template<class T>

Class name

Идентификатор Т определяет тип данных-элементов, хранящихся в стеке, и может использоваться в заголовке класса Stack и в функциях-элементах.

Шаблон класса Stack использовал только параметр типа в заголовке шаблона. Но в шаблонах имеется возмож­ность использования и так называемых нетиповых параметров. Например, заголовок нашего шаблона можно модифицировать следующим образом, указав в нем нетиповой параметр int elements:

template<class Т, int elements> // нетиповой параметр

Тогда, объявление типа

Stack<float, 100> mostRecentSalesFigures;

приведет к созданию (во время компиляции) шаблонного класса Stack с именем mostRecentSalesFigures, состоящего из 100 элементов данных типа float; этот шаблонный класс будет иметь тип Stack<float, 100>. В описании класса в разделе закрытых данных-элементов можно поместить следующее объявление массива

Т stackHolder[elements]; // массив для размещения данных стека

Вопрос 33. Шаблоны и наследование.

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

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

Шаблоны и наследование представляют собой механизмы повторного использования кода и могут включать полиморфизм. Шаблоны и Наследование связаны след. образом:

- Шаблон класса может быть порождён от шаблонного класса

- Шаблонный класс может быть производным от шаблонного класса

- Не шаблонный класс может быть производным от шаблона класса

- Шаблон класса может являться производным от не шаблонного класса.

- обычный класс может быть производным от шаблона класса

Класс, порождённый из шаблона, имеет такую структуру представления, к-ая не позволяет допускать отношение наследования.