Void Timer::SetTime(int phour,int pminute)

{hour=phour;

minute=pminute;}

Перевантаження функцій є ефективним механізмом у випадках, коли їх реалізації принципово різні. У нашому ж прикладі можна легко обійтись без перевантаження функцій, використовуючи параметри за умовчанням. Дійсно, писати свою функцію для кожного випадку ініціалізації полів даних класу Timer було б дуже нераціонально. Теоретично можлива кількість таких функцій, якщо підійти до цього питання чисто формально, становить 32, але за правилами перевантаження функцій допускається лише 5. Якщо б ми захотіли змоделювати всі ці ситуації за допомогою механізму параметрів за умовчанням, то теоретично необхідно було б 5! =120 (для кожного розміщення параметрів – по одній) функцій-членів класу вигляду

void Timer::SetTime(int pyear=0,int pmonth=0;\

int pday=0,int phour=0,int pminute=0;)

{year=pyear;

month=pmonth;

day=pday;

hour=pour;

minute=pminute;}

Це випливає із правил передавання параметрів за умовчанням. Проте компілятор допустить лише одну таку функцію. Очевидно, що всі шість допустимих варіантів перевантажених функцій з прототипами SetTime(), SetTime(int), SetTime(int,int), SetTime(int,int,int), SetTime(int,int,int,int), SetTime(int,int,int,int,int) можна замінити однією функцією з параметрами за умовчанням, якщо підібрати спеціально розміщення цих параметрів (щоб ініціалізувалися відповідні поля). З останнього прикладу опису функції Timer бачимо, що механізм передавання параметрів за умовчанням не може повністю замінити перевантаження функцій. Це не стосується загального випадку. Адже реалізація кожної перевантаженої функції може бути різною, і їх ніяк не можна замінити однією з параметрами за умовчанням з виграшем у розмірі тексту програми.

Конструктори та деструктори


Понравилась статья? Добавь ее в закладку (CTRL+D) и не забудь поделиться с друзьями:  



double arrow
Сейчас читают про: