Меню сайта

Урок 13. Перегрузка функций в C++


ПЕРВОЕ ЗНАКОМСТВО С ПЕРЕГРУЗКОЙ ФУНКЦИЙ

Перегрузка функций позволяет вашим программам определять несколько функций с одним и тем же именем и типом возвращаемого значения. Например, следующая программа перегружает функцию с именемadd_values. -Первое определение функции складывает два значения типаint. -Второе определение функции складывает три значения. В процессе компиляции C++ корректно определяет функцию, которую необходимо использовать:

#include &lt-iostream.h&gt-

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 &lt-&lt- «200 + 801 = » &lt-&lt- add_values(200, 801) &lt-&lt- endl-
— — -cout &lt-&lt- «100 + 201 + 700 = » &lt-&lt- add_values(100, 201, 700) &lt-&lt- endl-
}

Как видите, программа определяет две функции с именамиadd_values —Первая функция складывает два значения типа —int, -в то время как вторая складывает три значения. Вы не обязаны что-либо предпринимать специально для того, чтобы предупредить компилятор о перегрузке, просто используйте ее. Компилятор разгадает, какую функцию следует использовать, основываясь на предлагаемых программой параметрах.

Подобным образом следующая программа MSG_OVR.CPP перегружает функциюshow_message. -Первая функция с именемshow_message -выводит стандартное сообщение, параметры ей не передаются. Вторая выводит передаваемое ей сообщение, а третья выводит два сообщения:

#include &lt-iostream.h&gt-

void show_message(void)

{
— — -cout &lt-&lt- «Стандартное сообщение: » &lt-&lt- «Учимся программировать на C++» &lt-&lt- endl-
}

void show_message(char *message)

{
— — -cout &lt-&lt- message &lt-&lt- endl-
}

void show_message(char *first, char *second)

{
— — -cout &lt-&lt- first &lt-&lt- endl-
— — -cout &lt-&lt- second &lt-&lt- 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++ позволяет вашим программам определять несколько функций с одним и тем же именем. Перегруженные функции должны возвращать значения одинакового типа*, но могут отличаться количеством и типом параметров. До появления перегрузки функций в C++ программисты языка С должны были создавать несколько функций с почти одинаковыми именами. К сожалению программисты, желающие использовать такие функции, должны были помнить, какая комбинация параметров соответствует какой функции. С другой стороны, перегрузка функций упрощает задачу программистов, требуя, чтобы они помнили только одно имя функции.

* Перегруженные функции не обязаны возвращать значения одинакового типа по той причине, что компилятор однозначно идентифицирует функцию по ее имени и набору ее аргументов. Для компилятора функции с одинаковыми именами, но различными типами аргументов — разные функции, поэтому тип возвращаемого значения — прерогатива каждой функции. — Прим.перев.

ЧТО ВАМ НЕОБХОДИМО ЗНАТЬ

Перегрузка функций позволяет вам указать несколько определений для одной и той же функции. В процессе компиляции C++ определит, какую функцию следует использовать, основываясь на количестве и типе передаваемых параметров. Из данного урока вы узнали, что перегружать функции достаточно просто. Из урока 14 вы узнаете, как ссылки C++ упрощают процесс изменения параметров внутри функций. Однако, прежде чем перейти к уроку 14, убедитесь, что вы изучили следующие основные концепции:

    1. Перегрузка функций предоставляет несколько «взглядов» на одну и ту же функцию внутри вашей программы.
    2. Для перегрузки функций просто определите несколько функций с одним и тем же именем и типом возвращаемого значения, которые отличаются только количеством и типом параметров.
    3. В процессе компиляции C++ определит, какую функцию следует вызвать, основываясь на количестве и типе передаваемых параметров.
    4. Перегрузка функций упрощает программирование, позволяя программистам работать только с одним именем функции.

Категория: Обучение C++ | Дата: 04.04.13

Меню раздела
Блок