Добавил:
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Скачиваний:
2
Добавлен:
31.01.2021
Размер:
11.39 Кб
Скачать

Інформатика — Теорія — Перевантаження функцій    Автори

|

Контакти

|

Підсистема допомоги

|

Методичні вказівки

|

Анотація

|

Назад

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

Вступ

Теорія

Визначення й виклик функцій

Передача параметрів

Функції, що не повертають значення

Функції із змінним числом параметрів

Рекурсивні функції

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

Передача параметрів за замовчуванням

Масиви як параметри функцій

Шаблони функцій

Практика

Практичне заняття

Лабораторна робота

Поточна перевірка знань

Функції

Висновки

Версія для друку

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

Соседние файлы в папке content