Значения параметров по умолчанию
В предыдущем упражнении вы увидели, что вызов с пропущенным аргументом не компилируется. Но часто есть значение, которое подходит в большинстве случаев, а другое мы передаём лишь время от времени. Например, большинство людей заказывают кофе среднего размера. Для таких случаев у параметра может быть значение по умолчанию: после имени параметра напишите = и значение:
#include <iostream>
#include <string>
void orderCoffee(std::string drink, std::string size = "средний") {
std::cout << drink << ", размер: " << size << std::endl;
}
int main() {
orderCoffee("Латте", "большой");
orderCoffee("Эспрессо");
}Эта программа выводит:
Латте, размер: большой
Эспрессо, размер: среднийЕсли вызов передаёт аргумент для size, функция использует его. Если нет, функция использует значение по умолчанию "средний". Без значения по умолчанию второй вызов не скомпилировался бы, потому что в нём не хватало бы аргумента.
Аргументы попадают в параметры по порядку, поэтому параметры со значениями по умолчанию должны стоять в конце. Тогда можно опустить последние аргументы, а переданные всё равно попадут в нужные параметры. C++ даже не разрешает ставить параметр без значения по умолчанию после параметра с ним:
void orderCoffee(std::string size = "средний", std::string drink) {Такая программа не компилируется. Ошибка error: missing default argument on parameter 'drink' говорит, что у параметра drink нет значения по умолчанию: если оно есть у какого-то параметра, оно должно быть и у всех параметров после него.
Задание
- 1
В нашем магазине большинство цен указано в евро, поэтому последний вызов в
mainпередаёт только цену. Из-за этого программа не компилируется. Задайте параметруcurrencyзначение по умолчанию"EUR". Тогда программа выведет три цены, и последняя из них —Цена: 80 EUR. - 2
Под функцией
printPriceсоздайте функциюprintLineс двумя параметрами:lengthтипаintиsymbolтипаcharсо значением по умолчанию'-'. Функция выводитsymbolстолько раз, сколько указано вlength, всё в одной строке: в циклеforвыводите толькоsymbol, а строку заканчивайте после цикла. - 3
В конце
mainвызовитеprintLine(10), а затемprintLine(5, '*'). Под ценами программа выведет строку из десяти дефисов, а под ней — пять звёздочек:---------- *****