Функции в С++
В С++ есть стандартные и собственные функции. Стандартные функции описаны в библиотеках. Реализацию собственных функций описывают самостоятельно. Имеет вид: тип имяФункции(тип аргумент-1, тип аргумент-1 и тд.) {тело функции}. Вызывают функцию так: имяФункции(1,2);
Стандартные функции
Стандартные функции - это уже написанные функции со своим алгоритмом, их только вызывают, указав если нужно аргументы.
int a = max(2, 3);//3 – выбирает большее
int b = pow(2, 3);//8 – 2 в степени 3
cout << a << " и " << b << endl;//3 и 8
Собственные функции
Алгоритм собственной функции нужно описать в теле функции.
#include <iostream>//Подключаем cin и cout и др.
using namespace std;//Пространство имён
void f1(string n)//Функция f1
{
cout << "Привет, " << n << endl;
}
int main()
{
setlocale(0,"");//Кириллица
f1("Мир!");//Вызываем функцию f1
system("pause");//Задержка
return 0;//Возвращаем числовое значение
}
Перед именем функции указываем тип возвращаемого значения, а в теле пишем return или перед функцией void - функция ни чего не возвращает и return писать не надо. Перед аргументами обязательно указываем тип данных.
#include <iostream>//Подключаем cin и cout и др.
using namespace std;//Пространство имён
int sum(int a,int b)
{
return a+b;//Суммируем
}
int main()
{
setlocale(0,"");//Кириллица
cout << sum(2,3) << endl;//5
system("pause");//Задержка
return 0;//Возвращаем числовое значение
}
Переменные, которые находятся внутри функции (в теле) не видны снаружи, а переменные созданные вне функции видны внутри функций. Такое свойство называется областью видимости переменной.
...
int b=5;
int sum(int a)
{
return a+b;//Суммируем
}
...
В аргументе & (ссылки)
Если в аргументе (между типом и именем) указать &, то передаваемая переменная после выполнения функции тоже поменяет значение.
#include <iostream>//Подключаем cin и cout и др.
using namespace std;//Пространство имён
void f(int &b)
{
b+=10;//b=b+10;
}
int main()
{
int a=5;
cout << a << endl;//5
f(a);//5+10
cout << a << endl;//15
system("pause");//Задержка
return 0;//Возвращаем числовое значение
}
Если хотим изменить глобальное значение переменной, передаваемой в качестве аргумента, передаём переменную и впереди ставим амперсанд - &. Мы, как бы передаем не значение переменной, а ссылку на неё.
Примечание: int sum(int &a) или можно так int sum(int& a).
Прототипирование функций
Описание функции должно быть выше (по коду), чем обращение к ней, так как программа её просто НЕ видит. В таких случаях используют прототипирование функций - размещение прототипа выше по коду. Прототип представляет собой: тип имяФункции(тип Арг.); без тела. Можно даже не указывать имена аргументов.
Пример передачи в функцию указателя* на массив
#include <iostream>//Подключаем cin и cout и др.
using namespace std;//Пространство имён
//void f1(int* arr,int n);//можно и так...
void f1(int*,int);//Прототипирование функции
int main()
{
setlocale(0,"");//Кириллица
int arr[]={1,2,3,4,88};//Массив
int size=sizeof(arr)/sizeof(int);//Размер массива //можно и так...
//int size=sizeof(arr)/sizeof(arr[0]);//Размер массива
f1(arr,size);//можно и так...
//int *mass=arr;//УКАЗАТЕЛЬ на arr
//f1(mass,size);//Аргументы: указатель на массив, размер массива
system("pause");//Команда задержки экрана
return 0;
}
void f1(int* arr,int n)
{
cout << "Элементов в массиве: " << n << "\n\n";
for (int i=0;i<n;i++)
cout << arr[i] << "\t";
cout << endl;
}
Можно указать значение аргумента по умолчанию.
...
void f1(int* arr,int n=8)
...