Інформатика
Функції : Перевантаження функцій
 

Перевантаження функцій

     Перевантаження функцій дозволяє визначати кілька функцій з тим самим ім'ям і типом значення, що повертається. Наприклад, програма перевантажує функцію з ім'ям add_values. Перше визначення функції складає два значення типу int. Друге визначення функції складає три значення. У процесі компіляції C++ коректно визначає функцію, яку необхідно використовувати.

Приклад 12. Перевантаження функцій з різною кількістю параметрів.

#include <iostream.h>

int add_values(int a,int b)

{
     return(a + b);
)

int add_values (int a, int b, int c)

(
     return(a + b + c);
)

void main(void)

{
     cout << "200 + 801 = " << add_values(200, 801) << endl;
     cout << "100 + 201 + 700 = " << add_values(100, 201, 700) << endl;
}

     Програма визначає дві функції з іменами add_values Перша функція складає два значення типу int, у той час як друга складає три значення. Компілятор розгадає, яку функцію варто використовувати, ґрунтуючись на пропонованих програмою параметрах.

     Подібним чином наступна програма MSG_OVR.CPP перевантажує функцію show_message. Перша функція з ім'ям show_message виводить стандартне повідомлення, параметри їй не передаються. Друга виводить передане їй повідомлення, а третя виводить два повідомлення.

Приклад 13. Перевантаження функцій з різною кількістю параметрів.

#include <iostream.h>

void show_message(void)

{
     cout << "Стандартне повідомлення: " << "Учимося програмувати на C++" << endl;
}

void show_message(char *message)

{
     cout << message << endl;
}

void show_message(char *first, char *second)

{
     cout << first << endl;
     cout << second << endl;
}

void main(void)

{
     show_message();
     show_message("Учимося програмувати мовою C++!");
     show_message("B C++ немає забобонів!","Перевантаження - це круто!") ;
}

     Одним з найбільш загальних випадків використання перевантаження є застосування функції для одержання певного результату, виходячи з різних параметрів. Наприклад, у програмі є функція з ім'ям day_of_week, що повертає поточний день тижня (0 для неділі, 1 для понеділка, ..., 6 для суботи). Ваша програма могла б перевантажити цю функцію таким чином, щоб вона вірно повертала день тижня, якщо їй переданий юліанський день як параметр, або якщо їй передані день, місяць і рік.

int day_of_week(int julian_day)

{
     // Оператори
}

int day_of_week(int month, int day, int year)

{
     // Оператори
}

     Перевантаження функцій C++ дозволяють програмам визначати кілька функцій з тим самим ім'ям. Перевантажені функції можуть повертати значення неоднакового типу, можуть відрізнятися кількістю й типом параметрів. До появи перевантаження функцій в C++ програмісти мови С повинні були створювати кілька функцій з майже однаковими іменами. На жаль, програмісти, що бажають використовувати такі функції, повинні були пам'ятати, яка комбінація параметрів відповідає якій функції. З іншого боку, перевантаження функцій спрощує завдання програмістів, вимагаючи, щоб вони пам'ятали тільки одне ім'я функції.

     Перевантажені функції не зобов'язані повертати значення однакового типу з тієї причини, що компілятор однозначно ідентифікує функцію по її ім'ені й набору її аргументів. Для компілятора функції з однаковими іменами, але різними типами аргументів - різні функції, тому тип значення, що повертається - прерогатива кожної функції.

 
© 2008 ХНУРЭ, Інформатики, Сінельнікова Т.Ф., informatika@kture.Kharkov.ua
Розроблено за допомогою LERSUS