Как происходит вызов функции и возврат из нее

Обновлено: 28.06.2024

На уроке будут рассмотрены Javascript функции, как пользовательские, так и встроенные; способы создания и вызов функций; локальные и глобальные переменные в функции, а также рекурсивный вызов функции в javascript

Встроенные Javascript функции

В javascript достаточно много функций, встроенных в синтаксис языка. Рассмотрим одну из них.

eval(строка)

Функция eval(строка) вычисляет выражение в указанной строке (в качестве параметра); выражение должно быть составлено по правилам языка JavaScript и не содержать тегов HTML:

Рассмотрим пример использования функции eval:

let y = 5; // значение у равно 5 let x = "if (y==5) y*2-3"; // значение х равно строке символов let rezult = eval(x); // rezult равно 7

Задание js4_1. В скрипте запрашивать у пользователя ввести в диалоговое окно ввода математическое выражение, затем вычислить значение данного выражения и результат вывести в диалоговом окне.

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

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

  1. Функция в роли процедуры. Если функция выполняет какие-либо действия и не возвращает значение:

Синтаксис объявления (создания) функции:

Другой вариант создания функции — Function Expression (Функциональное Выражение):

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

В javascript вызов функции в роли процедуры происходит следующим образом:

имя_функции (аргументы); // с аргументами имя_функции (); // без аргументов

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

В javaScript вызов функции, возвращающей значение, происходит, например, следующим образом:

let a = имя_функции (аргументы); alert(a); // 1-й способ let b = a + a; // 2-й способ

То есть значение нужно либо вывести на экран, либо можно использовать в дальнейших выражениях.

Как видно из примера, после return функция действительно завершает свою работу. Поэтому оператор alert("2") выполняться уже не будет.

let a=sayHello(); alert(a);

Вызов функции происходит через присваивание. Вызов в данном примере можно также организовать так: alert(sayHello()); , но это не рекомендуемый вариант.

Важно: Таким образом, директива return указывает на возвращаемое значение функции, которое будет передано переменной при следующей форме вызова:

функции

Примерный фрагмент кода для одного из способов:

  1. Для чего используются функции?
  2. Объясните в чем разница использования функции в роли процедуры и функции с классическим оформлением?
  3. Опишите синтаксис вызова функции в роли процедуры.
  4. Опишите синтаксис вызова функции с классическим оформлением.
  5. Для чего служит директива return ?

Javascript функции с параметрами (аргументами) и возврат значений

Рассмотрим подробнее использование инструкции return в функции javascript на двух примерах. Кроме того, рассмотрим использование в Javascript функции с параметрами (аргументами).

  • Объявите функцию sayHello. В скобках аргументов функции укажите аргумент с именем userName:
    Объявите функцию sayHello. В скобках аргументов функции укажите аргумент с именем userName:

. let a = sayHello("Вася"); alert(a);

Важно: Обратите внимание на разницу между вызовом функции без директивы return и с директивой: в первом случае функция вызывается как оператор, возвращая значение undefined ; во втором случаем функция вызывается через присваивание, либо участвуя в выражениях (см. ниже)

У функций могут быть необязательные аргументы:

function f(x, y = 3) < return x + y; >f(2); // 5

Все способы создания пользовательских функций

//обязательным является только последний аргумент – тело функции let a1 = new Function('x', 'y', 'return x + y');

let a1 = new Function('return "hello"');

Вызов функций во всех случаях будет:

let a = a1(3, 4); alert(a); // вывод значения на экран

Использование выражений с функциями

Обычное использование javascript функции:

Функция как составная часть выражения:

Во второй функции ( add() ) используется выражение, ссылающееся на первую функцию ( sum() , в 11-й строке).

Задание js4_6. Создать функцию, возвращающую наибольшее из трех чисел. Аргументами функции являются сами числа.

function findMax(a,b,c) < . return . >let max = . .

(только для функций, которые возвращают результат):

Рассмотрим примеры для функции:

function plRectangle(width, height)

Варианты выражений:

⇒ Вызов функции как часть выражения:

S3 = 0.5 * plRectangle(a, b);

⇒ Вызов функции в логических выражениях:

if (plRectangle(a, b) > plRectangle(c, d)) alert("Первый прямоугольник больше второго");

⇒ Вызов javascript функции в качестве параметра другой функции:

let х = "25рх"; let у = 12; let S = plRectangle(parselnt(x), у);

Задание js4_7. Используйте функцию для модернизации примера с окончанием слова про количество ворон. Откройте файл с выполненным заданием про ворон. Необходимо вызывать функцию с параметром – количество ворон.

  1. Что такое аргументы функции и где они указываются?
  2. Может ли на месте аргумента функции находиться вызов другой функции?

Область видимости переменных. Javascript глобальные и локальные переменные в функции

Область видимости переменной — область кода, в котором переменная доступна для использования.

    Глобальные переменные — создаются на уровне сценария и сохраняются до конца сценария; — объявляются до описания javascript функции:

let a = 1; function . .

for (let i=1;i — явно объявляются в теле javascript функции;

Задание js4_9. Дополните код согласно заданию:
Создать 2 переменные глобальной и локальной области видимости (то есть внутри функции func ) с именами: global , local .
Переменной global присвоить текст “Привет, ”, а local — “Мир”. Используя переменные, выведите их значения дважды: в основной программе и в теле функции.

function func() < >func();

Область видимости переменных

Рассмотрим конкретные примеры области видимости переменных в javascript при использовании глобальных и локальных переменных.

let S = 2; // Глобальная переменная S function plRectangle(width, height) < let S = width * height; return S // Локальная переменная S >z = plRectangle(2, 3); alert(z); alert(S);

Пример: Значение z равно 6, а значение S осталось равным 2, то есть значению глобальной переменной, определенной во внешней программе

function plRectangle(width, height) < let s = width * height; // аргументы всегда локальны width = width + 10; return s >width = 2; height = 3; z = plRectangle(width, height); alert(z); alert(width);

function Plrectangle(width, height) < S = width * height; //глобальная переменная return S >z = Plrectangle(2, 3); S=2; // изменяем глобальную переменную alert(z); alert (S);

Пример: Значение z равно 6, а значение S равно 2, то есть значению измененной глобальной переменной, определенной во внешней программе

function plRectangle(width, height) < let S = width * height; let x = 17; return S >z = plRectangle(2,3); alert(z); alert(x); // не определена во внешней программе alert (S); // не определена во внешней программе

Пример: Значение z равно 6; переменная S во внешней программе не определена; переменная х во внешней программе не определена

  1. Какова разница между локальными и глобальными переменными?
  2. Зачем в программировании существует необходимость деления переменных на локальные и глобальные?

Рекурсивная функция javascript

Важно: В информатике и программировании, а, соответственно, и в javascript, рекурсия — это вызов функции из самой же функции, т.е. функция в функции

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

  • начальное условие (известное значение для переменной, отправной момент рекурсии);
  • рекурсивное правило;
  • условие окончания рекурсии.

Рекурсия javascript рассмотрена ниже на примере возведения числа в степень.
Для начала рассмотрим итерационный вариант возведения в степень, т.е. с использованием цикла:

Пример: Используя функцию, необходимо вычислять возведение числа в степень. Выполнить задание, используя цикл for

let chislo,stepen; function degree(chislo,stepen) < for(let result = 1; stepen >0; stepen--) < result *= chislo; >return result; > document.write(degree(2,4)); // выводит 16

Пример: Выполнить возведение числа в степень через рекурсию. Оба значения запрашивать у пользователя. Выдавать результат в виде:

  • Объявите глобальные переменные для числа и степени и запросите их:

let chislo,stepen; chislo = parseInt(prompt('число: ')); stepen = parseInt(prompt('степень: '));

function degree(chislo,stepen) < if(stepen) < … >return 1; // если степень равна нулю то возвращаем 1 >

document.write(chislo,' в степени ', stepen, ' = ', degree(chislo,stepen));

javascript рекурсия, возведение в степень

function f(counter) < counter--; document.write(counter + "
"); if (counter != 0) f(counter); document.write(counter + "
"); > f(2);

Задание js4_12. Вычислить факториал числа с использованием рекурсии, беря за образец пример вычисления факториала итерационным методом

let m = 2; x = factorial(m); document.write(x); function factorial(n)< if(n

  1. Что такое рекурсия?
  2. Назовите основные условия организации рекурсии, как вы их понимаете?

Стрелочные функции или лямбда выражения в javascript

Пример стрелочной функции с одним аргументом:

let f = x => x + 1; alert(f(5))

Расшифровываем так:
функция f равна значению x, такое, что x = x + 1.
То есть в результате в окно выведется 6.

Пример стрелочной функции с двумя аргументами:

let g = (x, y) => x + y; alert(g(5,3))

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

  • Назовем функцию factorial.
  • Определим рекурсивные правила:
  • Теперь данные правила опишем в самой рекурсивной функции в скрипте. Для написания функции будем использовать тернарный оператор:

let factorial = n => (n > 0) ? n * factorial(n-1) : 1;

Пример: Написать стрелочную функцию для вычисления первых n чисел ряда Фибоначчи. Функция должна быть рекурсивной.

  • Назовем функцию fib.
  • Определим рекурсивные правила:
  • Теперь данные правила опишем в самой рекурсивной функции в скрипте. Для написания функции будем использовать тернарный оператор:

let fib = n => (n > 2) ? fib(n-1) + fib(n-2) : 1;

Задание js4_14:
Используя стрелочную функцию, создайте последовательность 1 3 9 27 81 243 729 2187 6561 19683

  1. Какие функции называются стрелочными функциями?
  2. Есть ли разница между стрелочными функциями и лямбда выражениями в javascript?
  3. Каков синтаксис стрелочных функций?
Рубрики:

В вашем задание ответ неправильный. Ответ будет 6 и 6. Попробуйте сами запустить этот код function Plrectangle(width, height) S = width * height;
return S
>
S=2;
z = Plrectangle(2, 3);
alert(z);
alert (S);
Пример: Значение z равно 6, а значение S осталось равным 2, то есть значению глобальной переменной, определенной во внешней программе

admin

Да нет, всё верно

Dmitriy

Всё же не верно. S — глобальная переменная, и в теле функции S изменяется. Результат 6 и 6. Чтобы было верно, надо в в функции поставить var S=…

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

Формат описания функции

Описание функции состоит из двух основных частей - заголовка функции и тела функции.

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

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

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

Параметры, передаваемые в функцию, могут иметь значения по умолчанию, которые задаются константами соответствующего типа:

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

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

Правила исполнения функции

Место в программе для описания функции:

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

Вызванная для исполнения функция исполняется в соответствии с кодом, составляющим тело функции.

Формат оператора return

Возвращаемое функцией значение - это значение параметра, указанного в скобках оператора return. Оператор return состоит из ключевого слова return, Выражения, обрамлённого круглыми скобками, и заканчивается знаком ; (точка с запятой). Полноформатный оператор return:

Правило исполнения оператора return


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

Пример использования оператора return, возвращающего значение:

В функциях с типом возвращаемого значения void необходимо использовать оператор return без выражения:

Пример использования оператора return без возврата значения:

В описании функции допускается отсутствие оператора return. В этом случае функция автоматически завершает работу, если (в соответствии с исполняемым алгоритмом) в теле функции исполнился последний оператор. Пример описания функции, в которой не указан оператор return:

В данном случае функция завершит работу в момент окончания исполнения оператора цикла for. Последним движением при исполнении функции будет проверка условия в операторе цикла. Как только Условие в заголовке оператора цикла for станет ложным, управление будет передано за пределы оператора цикла. Но в связи с тем, что оператор цикла является последним исполняемым оператором в теле функции My_function (), пользовательская функция завершит работу, а управление будет передано за пределы функции, именно в то место, откуда функция была вызвана на исполнение.

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

Теоретическая часть

Принципы программирования на языке С основаны на понятии функции. Например, к системным функциям относятся printf() , scanf() , gets() , putchar() и др. Функции – это строительные элементы языка С и то место , в котором выполняется вся работа программы [10.1].

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

В основе всех программ на языке программирования С лежат одни и те же фундаментальные элементы – функции [10.2]. В частности, функция main() является обязательной для любой программы. Во всех программах С определяется единая внешняя функция с именем main() , служащая точкой входа в программу, то есть первой функцией, выполняемой после запуска программы [10.3].

Ни одна программа в языке С не может обойтись без функций.

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

Рассмотрим модельный пример программы, в которой, кроме функции main() , содержатся еще три функции [10.4].

В условной (модельной) программе имеются четыре функции: main() , function1() , function2() , function3() . Эти функции не имеют аргументов. Позднее рассмотрим функции, которые имеют аргументы. Аргументы функции – это величины, которые передаются функции во время ее вызова. Аргумент , стоящий в операторе вызова функции, называется фактическим параметром. Аргументы, стоящие в заголовке функции, называются формальными параметрами. В языке С функция может возвращать значение в вызывающую программу посредством оператора return . Оператор возврата из функции в точку вызова имеет две формы [10.5]:

В общем виде функция выглядит следующим образом [10.1]:

Тело_функции – это часть определения функции, ограниченная фигурными скобками и непосредственно размещенная вслед за заголовком функции. Тело функции может быть либо составным оператором , либо блоком [10.1]. В языке С определения функций не могут быть вложенными, т.е. внутри одной функции нельзя объявить и расписать тело другой функции.

Возвращаемый тип возвр-тип функции определяет тип данного, возвращаемого функцией. Например, это могут быть int , float , double и т.д. В случае, когда функция ничего не возвращает, ей присваивается тип void .

Функция может возвращать любой тип данных , за исключением массивов. Список параметров – это список , элементы которого отделяются друг от друга запятыми [10.1]. При вызове функции параметры принимают значения аргументов. Если функция без параметров, то такой пустой список можно указать в явном виде, поместив для этого внутри скобок ключевое слово void . Все параметры функции (входящие в список параметров) должны объявляться отдельно, причем для каждого из них надо указывать и тип, и имя. В общем виде список объявлений параметров должен выглядеть следующим образом [10.1]:

Результат выполнения программы показан на рис. 10.1.

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

Несмотря на то, что в функции printMessage() есть еще одно утверждение printf("\n\t 123\n") , которое не выполняется, поскольку используется утверждение возврата ( return ) из функции.

В языке С функция введена как один из производных типов .

Формальные параметры в определениях функций могут объявляться в форме прототипа [10.3]. Прототипы дают компилятору возможность тщательнее выполнять проверку типов аргументов [10.1]. Если используются прототипы, то компилятор может обнаружить любые сомнительные преобразования типов аргументов, необходимые при вызове функции, если тип ее параметров отличается от типов аргументов. Компилятор также обнаружит различия в количестве аргументов, использованных при вызове функции, и в количестве параметров функции.

В общем случае прототип функции должен выглядеть таким образом [10.1]:

В приведенной выше программе прототип функции printMessage() не использовался, так как сама функция была объявлена до главной функции main() . Для переносимости С -кода в С ++ использование прототипа функции обязательно. Поэтому к хорошему стилю программирования относится использование прототипов функций, поскольку большие программы обычно состоят из нескольких функций, часто расположенных в различных файлах.

Вышеприведенная программа с использованием прототипа функции printMessage() будет выглядеть следующим образом:

В листинге программы показаны две возможности использования прототипа функции printMessage() . При этом, сама функция printMessage() объявлена после функции main() .

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

Список фактических параметров – это список выражений, количество которых равно количеству формальных параметров функции ( исключение составляют функции с переменным числом параметров). Соответствие между формальными и фактическими параметрами устанавливается по их взаимному расположению в списках. Между формальными и фактическими параметрами должно быть соответствие по типам.

Синтаксис языка С предусматривает только один способ передачи параметров – передачу по значениям. Это означает, что формальные параметры функции локализованы в ней, т.е. недоступны вне определения функции и никакие операции над формальными параметрами в теле функции не изменяют значений фактических параметров [10.4].

Передача параметров по значению предусматривает следующие шаги [10.4]:

  1. При компиляции функции выделяются участки памяти для формальных параметров, т.е. формальные параметры оказываются внутренними объектами функции. При этом для параметров типа float формируются объекты типа double , а для параметров типов char и short int создаются объекты типа int. Если параметром является массив, то формируется указатель на начало этого массива, и он служит представлением массива-параметра в теле функции.
  2. Вычисляются значения выражений, использованных в качестве фактических параметров при вызове функции.
  3. Значения выражений – фактических параметров заносятся в участки памяти, выделенные для формальных параметров функции.
  4. В теле функции выполняется обработка с использованием значений внутренних объектов-параметров, и результат передается в точку вызова функции как возвращаемое ею значение.
  5. Никакого влияния на фактические параметры (на их значения) функция не оказывает.
  6. После выхода из функции освобождается память, выделенная для ее формальных параметров.

Важным является момент, что объект вызывающей программы, использованный в качестве фактического параметра, не может быть изменен из тела функции. Для подобного изменения существует косвенная возможность изменять значения объектов вызывающей программы действиями в вызванной функции. Это становится возможным с помощью указателя (указателей), когда в вызываемую функцию передается адрес любого объекта из вызывающей программы. С помощью выполняемого в тексте функции разыменования указателя осуществляется доступ к адресуемому указателем объекту из вызывающей программы. Тем самым, не изменяя самого параметра ( указатель - параметр постоянно содержит только адрес одного и того объекта), можно изменять объект вызывающей программы.

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

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

В языке С существует возможность создавать функции, число аргументов которых не определено – функции с переменным числом аргументов [1]. При этом следует указать только количество аргументов. Пример прототипа функции с переменным числом аргументов:

Многоточие (ј) в прототипе функции означает, что функция получает переменное число аргументов любого типа. Многоточие должно всегда находиться в конце списка параметров [1].

Макросы и определения заголовочного файла переменных аргументов stdarg.h (табл. 10.1) предоставляют программисту средства, необходимые для построения функций со списком аргументов переменной длины [1].

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

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

Что такое функции

Функции — это блок кода, который вы можете использовать в любом участке вашей программы неограниченное количество раз. Например, в программе ниже мы выводим 2 строки (без применения функций):

А вот если бы мы использовали функции, то у нас получилось бы так:

Мы хотим, чтобы вы обратили внимание на увеличение количества строк в первой программе при выводе этих двух строк 5 раз.

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

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

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

Как создать функции в C++

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

Давайте разберем эту конструкцию:

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

Но если мы не собираемся ничего передавать, а например, хотим просто вывести строку, то на месте можно указать тип void . Также вы можете указать тип int, это ни на что не повлияет.

  • Имя функции. Нам нужно задать функции имя (исключениями являются зарезервированные слова в C++, имена начинающиеся с цифр, а также имена разделенные пробелом).

Лучше всего задавать такое имя, которое будет говорить вам в будущем, за что отвечает эта функция. И тогда в будущем вам не придется вспоминать, за что она отвечает.

  • Аргументы функции. В скобках (после имени функции) могут находиться аргументы функции. Аргумент функции — это значение, которое можно передать функции при ее вызове. Если аргумент функции не один, а их несколько, то их нужно разделять запятой.

Если аргументов в функции нет, то в скобках можно указать тип void . Но писать его необязательно, он стоит по умолчанию.

  • Блок кода. После открывающей скобки идет блок кода, который будет начинать работать при вызове функции.

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

Если вы не знали main() — это тоже функция.

Как вызывать функцию

Для вызова функций вам нужно использовать такую конструкцию:

Например, выше для вызова функции stroka() (эта функция находится выше) нам нужно использовать такую конструкцию:

Как видите, мы не вписывали аргументы в круглые скобки, так как мы их не указали при создании функции.

Зачем использовать функции

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

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

В С++ вы можете создавать функции с одинаковыми именами. Вы наверно удивлены, что такое вообще возможно так, как если у нас будет 3 функции с одинаковыми именами и мы захотим вызвать одну из этих функций, то мы таким образом вызовем все 3 функции и получится полная каша. Но компилятор думает про это совершенно по-другому.

Все дело в том, что у каждой функции есть свое полное имя (или по-другому сигнатура). Параметры функции — это вся информация о функции. В эту информацию входят:

  • Имя функции.
  • Число аргументов функции.
  • Типы аргументов.

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

Перегрузка функций — это создание функций с одинаковыми именами, но с разными сигнатурами (полными именами).

Читайте также: