Функции-шаблоны

Функции-шаблоны создаются с использованием ключевого слова template (шаблон). Шаблон используется для создания каркаса функции, оставляя компилятору реализацию подробностей. Общая форма функции-шаблона имеет следующий вид: template<class птип> возвращаемый_тип имя_функции(список параметров) {// тело функции}. Здесь птип является параметром-типом, «держателем места» для имени типа данных, которое используется функцией. Этот параметр-тип может быть использован в определении функции. Он будет автоматически заменён компилятором на фактический тип данных во время создания конкретной версии функции. Можно определить несколько типов-шаблонов данных в инструкции template, используя список с запятыми в качестве разделителя. Пример(“template <class type1, class type2> void myfunc(type1 x, type2 y) “).

Явная перегрузка функций-шаблонов. Хотя функция-шаблон перегружает себя по мере необходимости, также можно перегрузить её явным образом. Если перегружается функция – шаблон, то перегруженная функция переопределяет функцию шаблон для того конкретного набора типов параметров, для которых создаётся перегруженная функция.

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

 

Вопрос 41. Классы-шаблоны

Кроме функций – шаблонов можно также определить классы – шаблоны. Для этого следует создать класс, определяющий все алгоритмы, но фактический тип данных является параметром, определяющимся при создании класса. Общая форма: template <class птип> class имя_класса {…};

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

После создания класса – шаблона можно создать конкретный экземпляр класса и объекты этого класса, использую общую форму: имя_класса <тип> объект;

Здесь тип является именем типа данных, с которым будет оперировать данный класс. Функции – члены класса – шаблона являются сами по себе автоматически шаблонами. (template <class SType> class stack{SType stck[SIZE];})

 

Вопрос 42. Использование пространства имен

Поскольку пространства с глобальной областью видимости добавляются к системе, то есть возможность коллизии имен, \ при использовании библиотек разных производителей.\. Использование namespace позволяет разбить глобальное пространство имен. Общая форма: namespace имя { \\ объявление объектов }. Если пространство определяет область видимости, то для ссылок на объекты, определенные в пространстве необходимо использовать оператор области видимости.

Если объекты области видимости будут использоваться часто, то можно использовать директиву using для упрощения доступа. Общая форма: 1) usingnamespace имя – все члены могут быть использованы без указания имени пространства имен и опертатора области видимости. 2) using имя::член – только для указанных членов пространства имен.


Ссылка на основную публикацию
Adblock detector