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

Int main ()

{

string name ("John");

string family ("Smith");

name += " K. "; // c-string

name += family; // string

name += '\n'; // character

cout << name;

return 0;

}

28. Шаблоны. Шаблоны функций. Перегрузка шаблонов функций. Специализация шаблонов функций. Шаблоны функций сортировки.

Шабло́ны (англ. template) — средство языка C++, предназначенное для кодирования обобщённых алгоритмов, без привязки к некоторым параметрам (например, типам данных, размерам буферов, значениям по умолчанию). В C++ возможно создание шаблонов функций и классов. Шаблоны позволяют создавать параметризованные классы и функции.

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

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

Шаблон функции можно описать так

Template <class<название общего типа>>

<тип функции><название функции>(<список формальных параметров>);

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

Явной специализацией шаблона ф-ции наз-ся опред-ние шаблона ф-ции для конкретных значений параметров этого шаблона. Синтаксис:

template<>

имя_функции< список_арг_шаблона> (параметры_функции)

блок_функции

Здесь имя_функции задает имя шаблона ф-ции, а список_арг_шаблона содержит аргументы, для которых вып-ся явная специализация этого шаблона ф-ции.

Явная спец. шаблона ф-ции исп-ся в двух случаях:

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

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

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

template <class T>

void Sort(int N, T *Buff);

Каждый вызов функции Sort приведет к автоматическому созданию подходящей реализации функции Sort и вызову ее. Например, следующий код

int Buff1[1000];

double Buff2[1000];

Sort(1000, Buff1);

Sort(1000, Buff2);

приведет к созданию двух функций Sort, предназначенных для сортировки массивов целых и вещественных чисел соответственно. Предполагается, что для каждого типа определен оператор сравнения - для int и double он предопределен, для собственных классов его нужно определить - вот связь с перегрузкой операторов.

Шаблонная функция гораздо лучше библиотечной функции языка C qsort:

void qsort(void *base, size_t num, size_t width, int (*cmp)(const void *elem1, const void *elem2));

т.к. обеспечивает контроль типов и [несколько] меньшее время выполнения (для сравнения элементов массива никогда не требуеся косвенный вызов функции, в некоторых случаях вызов функции вообще не требуется). Да и читается гораздо лучше.