Unetway

C ++ - Функции

Функция представляет собой группу операторов, которые вместе выполняют задачу. Каждая программа на C ++ имеет по крайней мере одну функцию, которая является main () , и все тривиальные программы могут определять дополнительные функции.

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

Функция declaration сообщает компилятор об имени функции во, типе возвращаемого значения и параметрах. Функция definition обеспечивает реальное тело функции.

Стандартная библиотека C ++ предоставляет множество встроенных функций, которые может вызывать ваша программа. Например, функция strcat () для объединения двух строк, функция memcpy() для копирования одной ячейки памяти в другое место и множество других функций.

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

Определение функции

Общая форма определения функции C ++ заключается в следующем:

return_type function_name( parameter list ) {
   body of the function
}

Определение функции C ++ состоит из заголовка функции и тела функции. Вот все части функции -

  • Return Type . Функция может возвращать значение. Тип return_type - это тип данных значения, возвращаемого функцией. Некоторые функции выполняют требуемые операции без возврата значения. В этом случае return_type является ключевым словом void .

  • Function Name - это фактическое имя функции. Имя функции и список параметров вместе составляют подпись функции.

  • Parameters . Параметр подобен заполнителю. Когда функция вызывается, вы передаете значение параметру. Это значение называется фактическим параметром или аргументом. Список параметров относится к типу, порядку и количеству параметров функции. Параметры являются необязательными; то есть функция не может содержать никаких параметров.

  • Function Body. Тело функции содержит набор операторов, которые определяют, что делает функция.

Пример

Ниже приведен исходный код для функции max () . Эта функция принимает два параметра num1 и num2 и возвращает наибольшую из них:

int max(int num1, int num2) {
   int result;
 
   if (num1 > num2)
      result = num1;
   else
      result = num2;
 
   return result; 
}

Объявление функций

Функция декларация сообщает компилятор о имени функции и как вызвать функцию. Фактическое тело функции можно определить отдельно.

Объявление функции имеет следующие части -

return_type function_name( parameter list );

Для указанной выше функции max () следующим является объявление функции -

int max(int num1, int num2);

Имена параметров не важны в объявлении функции только для их типа, поэтому следующее также является действительным объявлением -

int max(int, int);

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

Вызов функции

При создании функции C ++ вы даете определение того, что должна делать функция. Чтобы использовать функцию, вам придется вызвать или вызвать эту функцию.

Когда программа вызывает функцию, управление программой передается вызываемой функции. Вызываемая функция выполняет определенную задачу, и когда выполняется оператор return или когда достигается завершающая ее конечная скобка, она возвращает управление программой обратно в основную программу.

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

#include <iostream>
using namespace std;
 
// function declaration
int max(int num1, int num2);
 
int main () {
   // local variable declaration:
   int a = 100;
   int b = 200;
   int ret;
 
   // calling a function to get max value.
   ret = max(a, b);
   cout << "Max value is : " << ret << endl;
 
   return 0;
}
 
// function returning the max between two numbers
int max(int num1, int num2) {
   // local variable declaration
   int result;
 
   if (num1 > num2)
      result = num1;
   else
      result = num2;
 
   return result; 
}

Аргументы функции

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

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

При вызове функции существует два способа передачи аргументов функции -

Call by Value (Вызов по значению) Этот метод копирует фактическое значение аргумента в формальный параметр функции. В этом случае изменения, внесенные в параметр внутри функции, не влияют на аргумент.
Call by Pointer (Вызов по указателю) Этот метод копирует адрес аргумента в формальный параметр. Внутри функции адрес используется для доступа к фактическому аргументу, используемому в вызове. Это означает, что изменения, внесенные в параметр, влияют на аргумент.
Call by Reference (Вызов по ссылке) Этот метод копирует ссылку аргумента в формальный параметр. Внутри функции ссылка используется для доступа к фактическому аргументу, используемому в вызове. Это означает, что изменения, внесенные в параметр, влияют на аргумент.

По умолчанию C ++ использует вызов по значению для передачи аргументов. В общем, это означает, что код внутри функции не может изменять аргументы, используемые для вызова функции и вышеупомянутого примера, при вызове функции max (), используемой тем же методом.

Значения по умолчанию для параметров

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

Это делается с помощью оператора присваивания и назначения значений для аргументов в определении функции. Если значение для этого параметра не передается при вызове функции, используется заданное по умолчанию значение, но если задано значение, это значение по умолчанию игнорируется и вместо этого используется переданное значение. Рассмотрим следующий пример:

#include <iostream>
using namespace std;
 
int sum(int a, int b = 20) {
   int result;
   result = a + b;
  
   return (result);
}
int main () {
   // local variable declaration:
   int a = 100;
   int b = 200;
   int result;
 
   // calling a function to add the values.
   result = sum(a, b);
   cout << "Total value is :" << result << endl;

   // calling a function again as follows.
   result = sum(a);
   cout << "Total value is :" << result << endl;
 
   return 0;
}

Когда приведенный выше код компилируется и выполняется, он производит следующий результат:

Total value is :300
Total value is :120