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

Мы уже говорили о параметрах функции в отдельной статье. В этой — мы коротко разберемся, что такое параметры функции по умолчанию. Понять это несложно. Используют их в программировании в основном для удобства. Например нам надо нарисовать 5 одинаковых прямоугольников. Для этого мы можем написать функцию, которая принимает параметры по умолчанию. Рисует она, допустим, прямоугольник 10 на 10 символов. И этот символ всегда ‘@’:

#include <iostream>

using namespace std;

 

// функция рисует прямоугольник

void drawRectangle(int countSymb1 = 10, int countSymb2 = 10, char symb = '@')

{

for (int i = 0; i < countSymb1; i++)

{

for (int j = 0; j < countSymb2; j++)

{

cout << symb;

}

cout << endl;

}

cout << endl << endl;

}

 

int main()

{

setlocale(LC_ALL, "rus");

 

cout << "Пять прямоугольников:\n\n";

drawRectangle(); // не передаем в функцию никаких параметров

drawRectangle();

drawRectangle();

drawRectangle();

drawRectangle();

 

return 0;

}

Хотя мы не передавали в функции никаких параметров при вызове, мы увидим пять одинаковых прямоугольников из символов ‘@’ на нашем экране. Функция использовала те значения, которые были присвоены параметрам по умолчанию при её определении.

Но это не всё. Даже если мы определили параметры по умолчанию — есть удобная возможность изменить их значения при вызове.

#include <iostream>

using namespace std;

 

// функция рисует прямоугольник

void drawRectangle(int countSymb1 = 10, int countSymb2 = 10, char symb = '@')

{

for (int i = 0; i < countSymb1; i++)

{

for (int j = 0; j < countSymb2; j++)

{

cout << symb;

}

cout << endl;

}

cout << endl << endl;

}

 

int main()

{

setlocale(LC_ALL, "rus");

 

cout << "Используем параметры по умолчанию.\n\n";

drawRectangle(); // не передаем в функцию никаких параметров

 

cout << "Задаём другое количество символов в ширину, а количество\n"

<< "символов в высоту и сам символ  оставим по умолчанию.\n\n";

drawRectangle(5);

 

cout << "Меняем только символ.\n\n";

//drawRectangle('$');     // Ошибка! Функция НЕ будет работать правильно

drawRectangle(4, 5, '$'); // надо указать предшествующие символу параметры

 

return 0;

}

Допустим, надо нарисовать прямоугольник 5 символов в ширину. Остальные параметры (10 символов в высоту и сам символ ‘@’ ) нас устраивают. Тогда в функцию мы передаем только один параметр. Оставшиеся параметры функция возьмет из заданных по умолчанию.

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

На экране увидим:

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

На картинке параметр по умолчанию последний : char symb = ‘@’. Если их надо определить два — то точно так же это будут два крайних справа:

void drawRectangle(int countSymb1,int countSymb2 = 10,char symb = '@')

Если вы объявляете прототип функции — надо определить параметры по умолчанию именно в прототипе. В самом определении функции этого делать уже не надо. Пожалуй всё.