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

38) Виды функций. Функции с аргументами, заданными по умолчанию. Inline-функции.

inline - функция

Функция, которая имеет в заголовке слово inline считается встроенной и компилятор, в местах вызова функции вставляет её программный код. Такие функции не должны быть большие по объёму.

Функции с аргументами, заданными по умолчанию

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

39) Виды функций. Рекурсивные функции.

Рекурсивные функции – вызывают сами себя.

Рекурсивные вычисления выполняются повторными вхождениями в одну и ту же функцию. Каждое вхождение имеет свою память для внутренних переменных и независимо от других вхождений, эта память выделяется в стеке. Любой алгоритм можно представить в рекурсивной и не рекурсивной формах. Выбирают наиболее эффективную форму.

Недостатки рекурсии:

1) Потеря времени на вызов функции и передачу ей аргументов

2) Возможно превышение памяти, выделенной под стек

Достоинство:

1) Рекурсия позволяет создать достаточно простые и эффективные алгоритмы для решения ряда задач (работа с деревьями, графами, списками).

Основное правило создания рекурсивной функции

НЕОБХОДИМО ПРАВИЛЬНО РЕАЛИЗОВАТЬ ВЫХОД ИЗ РЕКУРСИИ.

40) Виды функций. Перегруженные функции.

Перегруженные функции

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

Пусть имеются след функции

int max(int a,int b);

int max(char*c,char*d);

char *max(int a,char *c);

char *max(char *d,int a);

int max (float a,float b);

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

41) Виды функций. Шаблоны функций.

Виды функции в С++:

Встроенная функция (inline)

Функции с аргументами заданными по умолчанию

Функции с переменным количеством аргументов

Рекурсивные функции

Перегруженные функции

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

Передача аргументов в функцию main() и возврат значения из неё

Inline - функция

Функция, которая имеет в заголовке слово inline считается встроенной и компилятор, в местах вызова функции вставляет её программный код. Такие функции не должны быть большие по объёму.

inline float Rast(float x1,float x2, float y1,float y2)

{

return sqrt((x1-x2)*(x1-x2)+(y1-y2)*(y1-y2));

}

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

Многие алгоритмы не зависят от типов данных. Хотелось бы такой алгоритм записать одной функцией, которую можно было бы использовать для различных типов данных, задавая в качестве параметров типы. Для этой цели в С++ существуют шаблоны. Цель: автоматизация создания функций, которые могут обрабатывать однотипные данные. Компилятор, по вызову функции создаёт функцию с обработкой данных заданного типа.

Формат шаблона функции:

template <class тип1, class тип2,… >

заголовок_функции

{ тело функции }

Пример 1

template <class T>

T abs (T x)

{return x>=0? x:-x;

}

Если к приведённому шаблону имеется вызов abs(10.5). По такому вызову компилятор сгенерирует следующий код функции

double abs (double x)

{return x>=0? x:-x;

}

Если задан тип int,

int a;

по вызову

abs(a)

компилятор сгенерирует следующий код функции

int abs (int x)

{return x>=0? x:-x;

}

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]