Урок 103. Параметры по умолчанию

   ⁄ 

 Обновлено 18 Фев 2018  ⁄ 

⁄   2728

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

Рассмотрим следующую программу:

Результат программы выше:

a: 1
b: 5
a: 6
b: 7

В первом вызове функции мы не передаем аргумент для b, поэтому функция использует значение по умолчанию — 5. Во втором вызове мы передаем значение для b, поэтому оно используется вместо параметра по умолчанию.

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

Несколько параметров по умолчанию

Функция может иметь несколько параметров по умолчанию:

При следующих вызовах функции:

Результат следующий:



Values: 3 4 5
Values: 3 4 12
Values: 3 11 12
Values: 10 11 12

Обратите внимание, предоставить аргумент для параметра c, не предоставляя при этом аргументы для параметров a и b — нельзя, перепрыгивать через параметры не разрешается. Это связано с тем, что C++ не поддерживает следующий синтаксис вызова функции: printValues(,,5). Из этого вытекают следующие два правила:

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

Правильно:

2. Если имеется более одного параметра по умолчанию, то самым левым параметром по умолчанию должен быть тот, который с наибольшей вероятностью (среди всех остальных параметров) будет явно переопределен пользователем.

Параметры по умолчанию могут быть объявлены только один раз

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

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

boo.h:

main.cpp:

Обратите внимание, в примере выше используется параметр по умолчанию b для функции printValues(), так как main.cpp #includes boo.h, который имеет предварительное объявление функции printValues() с объявленным параметром по умолчанию.

Правило: Объявляйте параметры по умолчанию в предварительном объявлении функции. В противном случае (если функция не имеет предварительного объявления) объявляйте в определении функции.

Параметры по умолчанию и перегрузка функций

Функции с параметрами по умолчанию могут быть перегружены. Например:

Если пользователь вызовет просто print() (без параметров), то выведется пробел, что будет результатом выполнения  print(' ').

Однако стоит отметить, что параметры по умолчанию НЕ относятся к параметрам, которые учитываются при определении уникальности функции. Следовательно, следующее не допускается:

При вызове printValues(10) компилятор не сможет определить, хотите ли вы вызвать printValues(int) или printValues(int, 15) (со значением по умолчанию).

Итого

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

Оценить статью:

Звёзд: 1Звёзд: 2Звёзд: 3Звёзд: 4Звёзд: 5 (18 оценок, среднее: 4,83 из 5)
Загрузка...
Подписаться на обновления:

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *

ПОДПИСЫВАЙТЕСЬ

НА КАНАЛ RAVESLI В TELEGRAM

@ravesli

ПОДПИСАТЬСЯ БЕСПЛАТНО