void func (const int *pn); // позволяет объявлять функции с ключевым словом const
Такое объявление параметра обеспечивает неизменяемость объекта, на который указывает pn, то есть это позволяет компилятору блокировать нежелательные побочные эффекты вызова функции.
void func1 (const char *pc) { //*pc=’A’; }
Замечание:
При объявлении константных параметров ключевое слово const должно фигурировать как в объявлении функции, так и в ее определении;
Нет необходимости объявлять с идентефикатором const параметры, которые представляют значение объекта, так как функция получает только копии исходных переменных.
void func( const int n);
“Перегрузка” имён функции.
Перегрузка – одна из особенностей C++, которая позволяет использовать одно и то же имя для разных функций.
Этот механизм возможен ввиду того, что функции с одним и тем же именем, но с разным количеством и разными типами параметров компилятор декорирует по-разному.
Ограничение в использовании перегрузки:
Не могут перегружаться функции, имеющие совпадающий тип и число аргументов, но разные типы возвращающих значений;
Не могут перегружаться функции, имеющие неявно совпадающие типы аргументов.
int MaxInt(int x; int y) { return (x>y); } double MaxDouble (double x, double y) { return (x>y); }
//примеры без перегрузки
main() { int i=MaxInt (12,8); double d= MaxDouble(1.1;2.2); }
C перегрузкой:
main() { int i=Max(12,8); double d= Max(1.1, 2.2); double dd=Max(1.1, 2); //ERROR!! } void f(int x, int y=5);
Возможный конфликт при использовании параметров по умолчанию.
void f(int x, int y = 0);
void f (int);
int main () {
f (2, 5) ; // ошибка
f (5); // ошибка, компилятор не знает, какую функцию вызывать.
}
Рекурсивные функции.
Вызывают сами себя.
Происходит выполнение одного и того же кода с разными наборами данных.
Каждое выполнение тела функции имеет свою область стека для параметров и локальных переменных.
Достоинства:
Ø компактность.
Недостатки:
Ø большие затраты времени на вызов функции;
Ø большие затраты памяти (стека) для организации каждого вложенного цикла.
Специфика рекурсивных функций:
Программист должен обеспечивать выход из рекурсии;