Функции в С++

Опубликовано: 11 Января, 2023

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

Синтаксис:

Пример:

Зачем нам нужны функции?

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

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

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

Пример:

Типы функций

Пользовательская функция

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

Библиотечная функция

Библиотечные функции также называются « встроенными функциями ». Эти функции являются частью пакета компилятора, который уже определен и состоит из специальной функции с особыми и разными значениями. Встроенная функция дает нам преимущество, поскольку мы можем использовать их напрямую, не определяя их, тогда как в пользовательской функции мы должны объявить и определить функцию перед их использованием.
Например: sqrt(), setw(), strcat() и т. д.

Передача параметров в функции

Параметры, передаваемые в функцию, называются фактическими параметрами . Например, в приведенной ниже программе 5 и 10 являются фактическими параметрами.
Параметры, полученные функцией, называются формальными параметрами . Например, в приведенной выше программе x и y являются формальными параметрами.

Существует два наиболее популярных способа передачи параметров:

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

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

Передача по ссылке используется там, где значение x не изменяется с помощью функции fun().

Функции, использующие указатели

Функция fun() ожидает указатель ptr на целое число (или адрес целого числа). Он изменяет значение по адресу ptr. Оператор разыменования * используется для доступа к значению по адресу. В выражении '*ptr = 30' значение по адресу ptr изменяется на 30. Оператор адреса & используется для получения адреса переменной любого типа данных. В операторе вызова функции 'fun(&x)' адрес x передается так, чтобы x можно было изменить, используя его адрес.

Разница между вызовом по значению и вызовом по ссылке в С++

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

Что нужно помнить о функциях в C++

1. В большинстве программ на C++ есть функция main(), которая вызывается операционной системой, когда пользователь запускает программу.

2. Каждая функция имеет возвращаемый тип. Если функция не возвращает никакого значения, то в качестве типа возвращаемого значения используется void. Более того, если возвращаемый тип функции недействителен, мы все равно можем использовать оператор return в теле определения функции, не указывая с ним никаких констант, переменных и т. д., упомянув только «return;» оператор, который будет символизировать завершение функции, как показано ниже:

C++




void function name(int a)
{
    ....... // Function Body
        return; // Function execution would get terminated
}

3. Чтобы объявить функцию, которую можно вызывать только без каких-либо параметров, мы должны использовать « void fun(void) ». В качестве примечания: в C++ пустой список означает, что функция может быть вызвана только без каких-либо параметров. В C++ и void fun(), и void fun(void) одинаковы.

Основная функция

Основная функция является специальной функцией. Каждая программа на C++ должна содержать функцию с именем main. Он служит точкой входа для программы. Компьютер начнет выполнение кода с начала основной функции.

Типы основных функций

1. Без параметров:

CPP




// Without Parameters
int main() { ... return 0; }

2. С параметрами:

CPP




// With Parameters
int main(int argc, char* const argv[]) { ... return 0; }

Причина наличия опции параметра для основной функции состоит в том, чтобы разрешить ввод из командной строки. Когда вы используете функцию main с параметрами, она сохраняет каждую группу символов (разделенных пробелом) после имени программы как элементы в массиве с именем argv .
Поскольку функция main имеет возвращаемый тип int , программист всегда должен иметь в коде оператор return. Возвращаемый номер используется для информирования вызывающей программы о результате выполнения программы. Возврат 0 означает, что проблем не было.

С++ рекурсия

Когда функция вызывается внутри одной и той же функции, в C++ это называется рекурсией. Функция, которая вызывает ту же функцию, называется рекурсивной функцией.
Функция, которая вызывает сама себя и не выполняет никаких действий после вызова функции, называется хвостовой рекурсией. В хвостовой рекурсии мы обычно вызываем одну и ту же функцию с оператором return.
Синтаксис:

Чтобы узнать больше, см. эту статью.

Передача массива C++ в функцию

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

functionname(arrayname); //passing array to function

Пример: вывести минимальное число

Перегрузка С++ (функция)

Если мы создаем два или более членов с одинаковыми именами, но разными по количеству или типу параметров, это называется перегрузкой C++. В C++ мы можем перегрузить:

  • методы,
  • конструкторы и
  • индексированные свойства

Это потому, что эти элементы имеют только параметры.

Типы перегрузки в C++:

  • Перегрузка функций
  • Перегрузка оператора

Перегрузка функций C++

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

Пример: когда тип аргументов меняется.

Перегрузка функций и неоднозначность

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

  • Преобразование типов.
  • Функция с аргументами по умолчанию.
  • Функция с передачей по ссылке.

Преобразование типа: -

Приведенный выше пример показывает ошибку « вызов перегруженного 'fun(double)' неоднозначен ». Fun(10) вызовет первую функцию. Fun(1.2) вызывает вторую функцию в соответствии с нашим предсказанием. Но это не относится к какой-либо функции, как в С++, все константы с плавающей запятой обрабатываются как двойные, а не как числа с плавающей запятой. Если мы заменим float на double, программа заработает. Следовательно, это преобразование типа из float в double.
Функция с аргументами по умолчанию: -

Приведенный выше пример показывает ошибку « вызов перегруженного 'fun(int)' неоднозначен ». Функция fun(int a, int b=9) может быть вызвана двумя способами: во-первых, вызовом функции с одним аргументом, т. е. fun(12), а во-вторых, вызовом функции с двумя аргументами, т. е. fun(4). ,5). Функция fun(int i) вызывается с одним аргументом. Таким образом, компилятор не мог выбирать между fun(int i) и fun(int a,int b=9).
Функция с передачей по ссылке: -

Приведенный выше пример показывает ошибку « вызов перегруженного 'fun(int&)' неоднозначен ». Первая функция принимает один целочисленный аргумент, а вторая функция принимает в качестве аргумента ссылочный параметр. В этом случае компилятор не знает, какая функция нужна пользователю, так как нет синтаксической разницы между fun(int) и fun(int &).

C