Ми вже говорили про параметрах функции в отдельной статье. В этой – ми коротко розберемося, что такое параметры функции по умолчанию. Зрозуміти це нескладно. Використовують їх в програмуванні в основному для зручності. Наприклад нам треба намалювати 5 однакових прямокутників. Для этого мы можем написать функцию, которая принимает параметры по умолчанию. Рисует она, припустимо, прямокутник 10 на 10 символов. І цей символ завжди‘@’:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 | #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; } |
Хотя мы не передавали в функции никаких параметров при вызове, мы увидим пять одинаковых прямоугольников из символов ‘@’ на нашем экране. Функция использовала те значения, которые были присвоены параметрам по умолчанию при её определении.
Но это не всё. Даже если мы определили параметры по умолчанию – есть удобная возможность изменить их значения при вызове.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 | #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(' |
Допустим, надо нарисовать прямоугольник 5 символов в ширину. інші параметри(10 символов в высоту и сам символ ‘@’ ) нас устраивают. Тоді в функцію ми передаємо тільки один параметр. Решта параметри функція візьме із заданих за замовчуванням.
Якщо ж нам необхідно змінити тільки символ і в параметрах він вказаний останнім, то придется прописать предшествующие параметры, даже если их значения нас устраивают.
На экране увидим:
Еще один момент, который касается определения параметров по умолчанию в заголовке функции. Определяться они должны справа налево. Наприклад якщо з трьох параметрів необхідно задати тільки один за замовчуванням, то он должен быть определен крайним справа.
На картинке параметр по умолчанию последний : charsymb=«@».Если их надо определить два – то точно так же это будут два крайних справа:
1 | void drawRectangle(int countSymb1,int countSymb2 = 10,char symb = '@') |
Если вы объявляете прототип функции – треба визначити параметри за замовчуванням саме в прототипі. В самом определении функции этого делать уже не надо. Пожалуй всё. Если что-то не понятно – спрашивайте в комментариях.
Ці параметри зазвичай ось так просто не застосовуються… Вони потрібні якщо є якісь типові параметри. Ну наприклад…
Ви пишіть читалку книг і за замовчуванням масштаб 100%. Можливо у вас буде функція типу
навантаження(рядок імені файлу, /* всякі інші параметри */, масштаб = 100);
Тобто,. зрозуміло, що ім'я файлу – обов'язковий параметр, а масштаб може і не вказуватися.
Пишіть ви текстовий редактор. Кодування за замовчуванням UTF-8 (например).
Пишіть штуку, яка зберігає що-небудь в XML форматі (є такий популярний формат) і за замовчуванням використовується XML версії 1.0.
Я параметри за замовчуванням в своїх функціях майже не використовую. Зараз пошукав їх в останньому своєму проекті. Знайшов тільки один приклад:
недійсним анімація(QString texturename, BOOL randomStartFrame = брехня);
Тут функція запускає анімацію, в першому аргументі передається ім'я файлу з анімацією. Якщо другий аргумент не вказано, то за замовчуванням анімація буде запущена починаючи з першого кадру. Якщо ж другий аргумент true – то анімація буде запущена з випадкового кадру.
Як на мене, ось в цьому випадку з анімацією параметри за замовчуванням теж використовувати не варто було б… У будь-якому випадку для їх виправданого використання потрібно “нормальне поведінки”, від якого можна відхилитися завданням параметрів.
в онлайн компіляторі не виходить – видає помилку на заданий приклад