Функция – именованная последовательность описаний и операторов, выполняющая некоторое действие. Может иметь параметры и возвращать значение.
Функция должна быть объявлена и определена. Объявление функции (прототип, заголовок) задает имя, тип значения и список формальных параметров. Определение содержит кроме объявления тело функции в фигурных скобках.
Вложенность функций в С++ не допускается!
[ класс ] [inline] тип имя ( [ список параметров ] )
{ тело функции }
Класс определяет видимость функции
- extern - во всех файлах программы (по умолчанию)
- static – только в файле, в котором ф-ция определена
Модификатор inline определяет функцию как встроенную. Компилятор по мере возможности будет вместо вызова функции помещать в точку вызова ее код.
Тип может быть любым кроме массива (но может быть указателем на массив). Если значение не возвращается, используется void
Список параметров определяет величины, значения которых передаются в функцию при ее вызове. Элементы списка разделяются запятыми. Для каждого параметра указывается тип и имя. В объявлениях имена можно опускать.
Для возврата значения используется оператор
return выражение
a b c; cout return 0; } int max(int a, int b) { if (a b) return a; else return b; } Вызов функции без параметров: f() " width="640"
имя (список фактических параметров)
Круглые скобки в С++ - операция с максимальным приоритетом
// максимум трех чисел
#include
int max(int a, int b) ;
int main()
{ int a, b, c;
cout Enter three numbers ";
cin a b c;
cout
return 0;
}
int max(int a, int b)
{ if (a 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
return 0;
}
Параметры-константы. Значения по умолчанию.
Указание перед именем параметра const запрещает его изменение .
В заголовке у параметров могут быть указаны значения по умолчанию
void f( const int n = 10 );
Передается указатель на первый элемент. Если размер массива не является константой, то он должен передаваться внутрь функции.
#include
int sum(int mas[], const int n)
{ int s = 0;
for (int i = 0; i
return s;
}
int main()
{ const int n = 5;
int marks[5] = { 1, 2, 3, 4, 5};
cout
return 0;
}
m n; int **a, i, j; a = new int * [m]; for ( i = 0; i for ( i = 0; i for (int j = 0; j a[i][j]; cout return 0; } " width="640"
Многомерные массивы передаются как двойные указатели ( int ** a).
#include
int sum(int **a, const int m, const int n)
{ int s = 0;
for (int i = 0; i
for (int j = 0; j
return s;
}
int main()
{ int m, n ;
cin m n;
int **a, i, j;
a = new int * [m];
for ( i = 0; i
for ( i = 0; i
for (int j = 0; j a[i][j];
cout
return 0;
}
1) ? n * fact(n - 1) : 1; } " width="640"
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 = 1000000;
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;
};
};


Использование функций в С++ (52.5 KB)

