Итоги: функции
В этом уроке вы узнали, что:
- Функция — это именованный кусок кода, который вы пишете один раз и можете выполнять столько раз, сколько нужно. Когда вы меняете функцию, изменение действует везде, где она используется.
- Функцию определяют с типом возвращаемого значения, именем, круглыми скобками с параметрами и телом в фигурных скобках:
void printArea(int width, int height) { ... }. Само определение ничего не выполняет. - Функцию вызывают по имени, с круглыми скобками и точкой с запятой:
printArea(5, 6);. Программа начинается в функцииmain, и оттуда вы вызываете другие функции. Функция должна быть определена выше места, где её вызывают, иначе вы получите ошибкуuse of undeclared identifier. - Параметр — это переменная в определении, аргумент — значение в вызове. Аргументы попадают в параметры по порядку, а их количество и типы должны соответствовать параметрам. У параметра может быть значение по умолчанию, но только в конце списка:
void printPrice(int price, std::string currency = "EUR"). returnвозвращает значение в место вызова, поэтому вызов можно использовать как значение:int total = add(2, 3) * 2;. Тип возвращаемого значения пишут перед именем функции.voidозначает, что функция ничего не возвращает.std::coutтолько показывает значение, а программа не может с ним работать. Функция, которая что-то вычисляет, должна возвращать результат. Число превращают в текст функциейstd::to_string().returnсразу завершает функцию, остальная её часть не выполняется. Функция, не являющаясяvoid, всегда должна возвращать значение, иначе программа остановится с ошибкой. Функцияmainвозвращаетint, аreturn 0;в её конце означает, что программа завершилась нормально.- Переменные, созданные внутри функции, и её параметры локальные: они существуют только внутри этой функции, и это относится и к
main. Значения попадают в функцию через параметры, а выходят черезreturn. - Параметр получает копию аргумента, даже если это вектор. Когда функция меняет параметр, переменная, которую передала
main, остаётся прежней.
В следующем уроке, «Ссылки и указатели», вы узнаете, как функция может изменить переменную, которую передал ей вызывающий код, и что такое адреса в памяти. После этого вас ждёт итоговый проект, в котором вы соберёте всё, чему научились на курсе.
Задание
- 1
Потренируемся. Над
mainнапишите функциюcartTotalс двумя параметрами:pricesтипаstd::vector<int>иdiscountтипаintсо значением по умолчанию0. Функция возвращает сумму цен минус скидка. Вmain, под векторомcart, выведитеcartTotal(cart)иcartTotal(cart, 50), каждое на отдельной строке. Программа выведет280и230. - 2
Напишите функцию
priceTextс параметромpriceтипаint, которая возвращает цену как текст: для0она возвращает"бесплатно", а в остальных случаях — цену с валютой, например"230 EUR"для230. Добавьте эту строку в конецmain, передreturn 0;:std::cout << "К оплате: " << priceText(cartTotal(cart, 50)) << std::endl;Программа сначала вызывает
cartTotalи передаёт возвращённое значение вpriceText. Под ней добавьте такую же строку для покупателя с подарочным сертификатом, у которого скидка280. Программа выведет:К оплате: 230 EUR К оплате: бесплатно