Функции Функция – именованная последовательность описаний и операторов, выполняющая некоторое действие. Может иметь параметры и возвращать значение. Функция должна быть объявлена и определена. Объявление функции (прототип, заголовок) задает имя, тип значения и список формальных параметров. Определение содержит кроме объявления тело функции в фигурных скобках. Вложенность функций в С++ не допускается!
Формат определения функции [класс] [inline] тип имя ( [список параметров] ) { тело функции } Класс определяет видимость функции extern - во всех файлах программы (по умолчанию) static – только в файле, в котором ф-ция определена Модификатор inline определяет функцию как встроенную. Компилятор по мере возможности будет вместо вызова функции помещать в точку вызова ее код. Тип может быть любым кроме массива (но может быть указателем на массив). Если значение не возвращается, используется void Список параметров определяет величины, значения которых передаются в функцию при ее вызове. Элементы списка разделяются запятыми. Для каждого параметра указывается тип и имя. В объявлениях имена можно опускать. Для возврата значения используется оператор return выражение
Вызов функции имя (список фактических параметров) Круглые скобки в С++ - операция с максимальным приоритетом // максимум трех чисел #include int max(int a, int b); int main() { int a, b, c; cout > a >> b >> c; cout b) return a; else return b; } Вызов функции без параметров: f()
Локализация имен Все величины, описанные внутри функции, а также ее параметры – локальные. Область видимости и жизни – тело функции (кроме статических переменных). Величины, описанные вне тела функций – глобальные. Локальные объекты перекрывают глобальные
Типы параметров Функции в С++ работают только с параметрами – значениями. Только массивы и функции передаются по адресу. Для передачи параметров по адресу используется либо указатель, либо ссылка. #include void f(int i, int* j, int& k) { i++; (*j)++; k++; } int main() { int i = 1, j = 1, k = 1; f( i, &j, k); cout
Параметры-константы. Значения по умолчанию. Указание перед именем параметра const запрещает его изменение. В заголовке у параметров могут быть указаны значения по умолчанию void f( const int n = 10);
Массивы как параметры Передается указатель на первый элемент. Если размер массива не является константой, то он должен передаваться внутрь функции. #include int sum(int mas[], const int n) { int s = 0; for (int i = 0; i < n; i++ ) s += mas[i]; return s; } int main() { const int n = 5; int marks[5] = { 1, 2, 3, 4, 5}; cout
Многомерные массивы Многомерные массивы передаются как двойные указатели ( int ** a). #include int sum(int **a, const int m, const int n) { int s = 0; for (int i = 0; i < m; i++ ) for (int j = 0; j < n; j++ ) s += a[i][j]; return s; } int main() { int m, n; cin >> m >> n; int **a, i, j; a = new int * [m]; for ( i = 0; i < m; i++) a[i] = new int [n]; for ( i = 0; i < m; i++) for (int j = 0; j > a[i][j]; cout
Рекурсивные функции long fact (long n) { return (n > 1) ? n * fact(n - 1) : 1; }
Перегрузка функций Одинаковые имена, но разные типы параметров. int max (int, int) char* max (char*, char*) Автоматическое преобразование типов может привести к неоднозначности Функции не могут быть перегружены, если отличаются только модификатором const или использованием ссылки.
Типы данных, определяемые пользователем typedef тип новое_имя [размер] Примеры: typedef unsigned long Cardinal; typedef char String [100]; Использование: const Cardinal p = ; String a,b,c;
Перечислимые типы Перечисления – способ определения числовых констант с различными значениями. Константы, не имеющие явно указанных значений, получают их в порядке возрастания. enum { список констант } Пример: enum {a, b, c=5, d} // a=0, b=1, c=5, d=6 Можно указать имя типа. Тогда переменной этого типа можно присваивать только одну из указанных констант Пример: enum year {winter, spring, summer, autumn}; year t; t = winter; cout
Структуры Аналог записей Паскаля. Содержат элементы разных типов. struct [имя типа] { тип1 имя1; тип2 имя2; … } [список_переменных];
Пример описания структуры #include struct student { char name[30], fam[30], gr[10]; int age; } vasya, group[25], *s; /* Для инициализации структуры значения полей берут в фигурные скобки */ student masha = {Mary", Ivanova", "05MOS1",18}; int main() { s = &masha; cout fam; // обращение к полям }
Структуры как параметры Структуры могут передаваться в функции и служить возвращаемым значением. struct ratio { int m,n; }; ratio add (ratio a, ratio b) { ratio c; c.m = a.m * b.n + a.n * b.m; c.n = a.n * b.n; return c; }
Битовые поля Поля структуры с размером в битах. Размер указывается через двоеточие после имени. struct flags { bool iszero:1; bool isgreat:1; int palette:6; };
Объединения Аналог записей с вариантами. Все поля располагаются по одному и тому же адресу. Длина объединения равна длине наибольшего поля. Используются для экономии памяти. Часто включаются внутрь структур. Пример: enum typeworker {student, teacher}; struct worker{ char fam[100]; typeworker wtype; union department{ char chair[100]; int group; };