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