Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
+ООП_Навч_посібник.doc
Скачиваний:
8
Добавлен:
01.07.2025
Размер:
6.58 Mб
Скачать

8.3.1. Можливі випадки передачі аргументів функції за замовчуванням

Наскільки корисна можливість передачі аргументів функції за замовчуванням, показано на прикладі функції clrscr(), представленої у наведеному нижче коді програми. Функція clrscr() очищає екран шляхом виведення послідовності символів нового рядка (це не найефективніший спосіб, але він надзвичайно підходить для даного прикладу). Оскільки в найбільш часто використовуваному режимі представлення відеозображень на екран дисплея виводиться 25 рядків тексту, то як аргумент за замовчуванням використовується значення 25. Але оскільки в інших відеорежимах на екрані може відображатися більше або менше ніж 25 рядків, то аргумент, що діє за замовчуванням, можна перевизначити, безпосередньо вказавши потрібне значення.

Код програми 8.11. Демонстрація механізму передачі аргументів функції за замовчуванням

#include <iostream> // Для потокового введення-виведення

using namespace std; // Використання стандартного простору імен

void clrscr(int size=25); // Очищаємо 25 рядків.

int main()

{

int i;

for(i=0; i<30; i++) cout << i << "\n";

clrscr(); // Очищаємо 25 рядків.

for(i=0; i<30; i++) cout << i << "\n";

clrscr(10); // Очищаємо 10 рядків.

getch(); return 0;

}

void clrscr(int size)

{

for(; size; size--) cout << "\n";

}

Як видно з коду цієї програми, якщо значення, що діє за замовчуванням, відповідає ситуації, під час виклику функції clrscr() аргумент вказувати не потрібно. Але в інших випадках аргумент, що діє за замовчуванням, можна перевизначити і передати параметру size потрібне значення.

Під час створення функцій, що мають значення аргументів, які передаються функції за замовчуванням, потрібно пам'ятати дві речі. Ці значення за замовчуванням мають бути задані тільки один раз, причому під час першого оголошення функції у файлі. У попередньому прикладі аргумент за замовчуванням було задано у прототипі функції clrscr(). Під час спроби визначити нові (або навіть ті ж) значення аргументів, що передаються функції за замовчуванням, у визначенні функції clrscr() компілятор відобразить повідомлення про помилку і не скомпілює Вашої програми.

Хоча передавані аргументи функції за замовчуванням мають бути визначені тільки один раз, проте для кожної версії перевантаженої функції для передачі за замовчуванням можна задавати різні аргументи. Таким чином, різні версії перевантаженої функції можуть мати різні значення аргументів, що діють за замовчуванням.

Важливо розуміти, що всі параметри, які приймають значення за замовчуванням, мають бути розташовані праворуч від інших. Наприклад, у наведеному нижче прототипі функції міститься помилка:

void fun(int a = 1, int b); // Неправильно!

Якщо Ви почали визначати параметри, які приймають значення за замовчуванням, то не можна після них вказувати параметри, що задаються під час виклику функції тільки безпосередньо. Тому наведене нижче оголошення також неправильне і не буде скомпільовано:

int myFunc(float f, char *str, int izm=10, int jzm); // Неправильно!

Оскільки для параметра izm визначено значення за замовчуванням, то для параметра jzm також потрібно задати значення за замовчуванням.