Рассмотрим следующую функцию на C++ для вычисления площади круга.

double circleArea(double radius, double pi) {
  return pi * radius * radius;
}

Эта функция принимает два параметра — радиус и число пи. Хотя значение числа пи является константой, различные варианты использования функции площади могут передавать значение числа пи с разной точностью. Вот несколько примеров -

circleArea(1.0, 3.14);
circleArea(1.0, 3.14159);

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

Есть ли способ упростить использование этой функции, когда пользователи хотят использовать 3,14 в качестве значения PI? Более того, что, если пользователя не волнует точность используемого PI, и его устраивает значение PI по умолчанию?

Параметры по умолчанию

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

C++ не является исключением и обеспечивает поддержку параметров по умолчанию. Вот как можно написать функцию circleArea для поддержки параметров по умолчанию.

double circleArea(double radius, double pi = 3.14) {
  return pi * radius * radius;
}

С новым определением функции площади значение по умолчанию 3,14 будет использоваться для PI, когда эта функция вызывается без какого-либо явного значения для PI. Значение по умолчанию будет переопределено, когда пользователь укажет значение для PI.

circleArea(1.2, 3.141); // radius = 1.2, pi = 3.141
circleArea(1.3); // radius = 1.3, pi = 3.14
circleArea(); // INCORRECT - No value for radius provided

Ограничения для параметров по умолчанию

Существуют некоторые ограничения на то, как мы можем использовать параметры по умолчанию в C++.

  • Все параметры справа от параметра по умолчанию должны быть параметрами по умолчанию.

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

double circleArea(double pi = 3.14, double radius) {
  return pi * radius * radius;
}

Рассмотрим следующий вызов.

circleArea(3);

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

Что делать, если пользователь намеревался указать значение, отличное от значения по умолчанию, для PI, но забыл указать значение для радиуса?

  • В вызове необходимы все параметры, отличные от параметров по умолчанию.
  • Аргументы по умолчанию нельзя переопределить.

Это означает, что следующее невозможно.

double circleArea(double radius, double pi = 3.14);
double circleArea(double radius, double pi = 3.141);

Хорошей практикой является предоставление параметров по умолчанию в файлах заголовков, а не в исходных файлах.

Это подводит нас к концу этого блога. Надеюсь, вы сегодня узнали что-то новое. Если вам интересно узнать больше о C++, посетите мой другой блог из серии «in C++» —