Инструменты пользователя

Инструменты сайта


shablony_funkcij

Различия

Здесь показаны различия между двумя версиями данной страницы.

Ссылка на это сравнение

shablony_funkcij [2010/08/26 02:57] (текущий)
Строка 1: Строка 1:
 +====== Шаблоны функций ======
 +  * [[Перегрузка функций]]
  
 +Шаблоны функций в языке С позволяют создать общее определение функции,​ применяемой для различных типов данных. ​
 +<​file>​
 +template <​typename T> T Abs (T N)
 +{
 +  return N < 0 ? -N : N;
 +}
 +</​file>​
 +  * **Основные принципы и понятия при работе с шаблоном.**
 +Теперь,​ после поверхностного знакомства - мы рассмотрим все особенности работы шаблонов:​
 +
 +  - При определении шаблона используются два спецификатора:​ template и typename.
 +  - На место параметра типа Т можно подставить любое корректное имя.
 +  - В угловые скобки можно записывать больше одного параметра типа.
 +  - Параметр функции - это значение,​ передаваемое в функцию при выполнении программы.
 +  - Параметр типа - указывает тип аргумента,​ передаваемого в функцию,​ и обрабатывается только при компиляции.
 +
 +  * **Процесс компиляции шаблона.**
 +  - Определение шаблона не вызывает генерацию кода компилятором самостоятельно. Последний создает код функции только в момент её вызова и генерирует при этом соответствующую версию функции.
 +  - Следующий вызов с теми же типами данных параметров не спровоцирует генерацию дополнительной копии функции,​ а вызовет ее уже существующую копию.
 +  - Компилятор создает новую версию функции,​ только если тип переданного параметра не совпадает ни с одним из предыдущих вызовов.
 +
 +====== Переопределение шаблонов функций ======
 +  - Каждая версия функции,​ генерируемая с помощью шаблона,​ содержит один и тот же фрагмент кода.
 +  - Однако,​ для отдельных параметров типа можно обеспечить особую реализацию кода, т. е. определить обычную функцию с тем же именем,​ что и шаблон.
 +  - Обычная функция переопределит шаблон. Если компилятор находит типы переданных параметров соответствующие спецификации обычной функции,​ то он вызовает ее, и не создает функцию по шаблону.
shablony_funkcij.txt · Последние изменения: 2010/08/26 02:57 (внешнее изменение)