Построение и использование шаблонов функций — КиберПедия 

Особенности сооружения опор в сложных условиях: Сооружение ВЛ в районах с суровыми климатическими и тяжелыми геологическими условиями...

Типы оградительных сооружений в морском порту: По расположению оградительных сооружений в плане различают волноломы, обе оконечности...

Построение и использование шаблонов функций

2017-12-21 173
Построение и использование шаблонов функций 0.00 из 5.00 0 оценок
Заказать работу

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

 

Простой пример шаблонной функции:

 

Type square (Type a)

{

Type b;

b = a*a;

return b;

}

 

int x = 5;

inti;

 

i = square(5);

 

float y = 0.5;

float f;

 

f = square(y);

Если бы мы создавали функции по старинке, то тогда бы пришлось писать две разные функции: для типа int и для типа float. А если бы понадобилась такая же функция, использующая другие типы, пришлось бы заново писать и её. Используя шаблоны, можно ограничиться только одним экземпляром функции, оставив всю грязную работу компилятору.

 

Вместо использования какого-то определённого типа, в функции используется параметрический тип (или по другому - аргумент шаблона). Здесь я обозвал параметрический тип идентификатором Type. В функции этот идентификатор встречается три раза: возвращаемое значение, аргумент функции и определение переменной b. То есть Type используется как любой обычный тип.

 

Но чтобы код заработал, перед функцией нужно добавить следующую строку (я показал несколько вариантов синтаксиса, все они рабочие):

 

template<class Type> Type square (Type a)

 

template<class Type>

Type square (Type a)

 

template< class Type >

Type square (Type a)

 

template< class Type > Type square (Type a)

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

 

Идентификатор параметрического типа тоже может быть любым. Мы часто будем пользоваться вот такими: TypeA, TypeB, Datatype, T.

 

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

 

В шаблонах можно использовать несколько параметрических типов, и конечно же можно смешивать параметрические типы со стандартными (только нужно позаботиться о правильном приведении типов). Приведу пример в котором используется два параметрических типа TypeA, TypeB и базовый тип int:

 

template<class TypeA, class TypeB>

TypeBexample_function (TypeA a, TypeB b)

{

int x = 5;

b = a + x;

return b;

}

 

Строковые функции

Функции для работы со строками объявлены в заголовочном файле string.h. Приведем некоторые из них:

 

char *strcpy(char *dest, const char *src);

 

копирует второй аргумент в первый. Возвращает указатель на копию. Память для dest должна быть заранее зарезервирована.

 

char *strdup(const char *s);

 

копирует строку во вновь создаваемую функцией malloc() область памяти. Возвращает указатель на созданную копию или 0 при неудаче. Программист ответственен за освобождение памяти функцией free();

 

size_tstrlen(const char *s);

 

подсчитывает размер строки. Возвращает количество символов строки без нулевого символа. Тип size_t определен в файле string.h и других заголовочных файлах как целое без знака: typedefunsignedsize_t;

 

char *strcat(char *dest, const char *src);

 

присоединяет вторую строку к первой. Возвращает указатель на начало нарощенной строки.

 

char *strchr(const char *s, int c);

 

сканирует строку s в поисках первого вхождения заданного символа с. Нулевой символ можно искать наряду с другими. Возвращает указатель на найденный символ или 0, если символа нет.

 

char *strrchr(constchar *s, int с);

 

то же, что strchr, но находит последнее вхождение символа с в строку s.

 

char *strstr(const char *s1, const char *s2);

 

находит первое вхождение подстроки s2 в строку s1. Возвращает указатель на место первого вхождения или 0, если такового нет.

 

intstrcmp(const char *s1, const char*s2);

 

сравнивает две строки. Возвращает целое меньше нуля, если s1 < s2, равное нулю, если s1 == s2, и большее нуля, если s1 > s2.

 

char *strpbrk(const char *s1, const char *s2);

 

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

 

char *strtok(char *s1, constchar *s2);

 

сканирует первую строку в поисках первого участка, не содержащего символов из s2. Первый вызов функции возвращает указатель на начало первого участка и записывает 0 в s1 сразу после конца участка. Последующие вызовы с 0 в качестве 1-го аргумента обрабатывают строку дальше, пока еще есть такие участки. Если их нет, возвращается 0. Функцию применяют для выделения слов из предложения si. В строке s2 находятся символы-разделители.

 


Поделиться с друзьями:

Кормораздатчик мобильный электрифицированный: схема и процесс работы устройства...

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

Индивидуальные и групповые автопоилки: для животных. Схемы и конструкции...

Организация стока поверхностных вод: Наибольшее количество влаги на земном шаре испаряется с поверхности морей и океанов (88‰)...



© cyberpedia.su 2017-2024 - Не является автором материалов. Исключительное право сохранено за автором текста.
Если вы не хотите, чтобы данный материал был у нас на сайте, перейдите по ссылке: Нарушение авторских прав. Мы поможем в написании вашей работы!

0.012 с.