Студопедия.Орг Главная | Случайная страница | Контакты | Мы поможем в написании вашей работы!  
 

Перегрузка функций



В “старом” языке С все имена функций должны быть уникальны в одном проекте. Это плохо и неудобно при работе с функциями, которые выполняют одинаковые или похожие действия с разными типами данных. Классический пример этого — стандартные функции с разными именами abs(x) и fabs(x), которые возвращают абсолютное значение, соответственно, целого и вещественного типа. В С++ можно определить несколько функций с одним и тем же именем, которые отличаются типами параметров и реже их количеством. Тогда говорят, что функции перегружены.

Прим е р 8. Опишем и будем использовать три функции, которые переставляют значения двух переменных разных типов:

void RR (int &, int &);

void RR (float &, float &);

void RR (char &, char &);

/* Напомним, что в прототипе имена переменных можно не писать, а обязательны только их типы */

int main()

{ int i1=11, i2=22; RR(i1,i2);

cout<<"\ni1="<<i1<<" i2="<<i2<<endl;

float f1=3.4, f2=5.6; RR(f1,f2);

cout<<"\nf1="<<f1<<" f2="<<f2<<endl;

char c1='a', c2='b'; RR(c1,c2);

cout<<"\nc1="<<c1<<" c2="<<c2<<endl;

getch(); return 0; }

void RR(int &u, int &v) { int t=u; u=v; v=t; }

void RR(float &u, float &v)

{ float t=u; u=v; v=t; }

void RR(char &c1, char &c2)

{ char c=c1; c1=c2; c2=c; }

Какой вариант функции RR из трёх вызывается в main()? Компилятор автоматически выберет необходимую версию функции на основании типа используемых в функции фактических параметров. Первый раз вызывается первый вариант функции для целых параметров, второй раз — для вещественных значений и, наконец, для символьных.

Разрешается перегружать функции, отличающиеся количеством параметров. Тогда конкретный вариант функции компилятор выбирает на основании количества используемых в функции фактических параметров. Например, можно перегрузить функцию для вывода даты в виде строки или в виде трёх целых чисел.

Нельзя, чтобы перегружаемые функции отличались только типом возвращаемых значений. Например, такая перегрузка функций

int FUN2(int); float FUN2 (int); компилятору не понравится”!

Упражнения и тесты

Изменить функцию SINCOS (§ 2) таким образом, чтобы оба результата, и y и z, вычислялись в одном цикле одновременно.

Вфункции SINCOS (§ 2) заменить оператор do … while на while.

Вфункции SINCOS (§ 2) заменить оператор do … while на for.

В функции main (см. 2.1) вместо оператора for записать while.

Вместо одной функции SINCOS типа void cоставить и использовать две отличные от void функции для вычисления y и z.





Дата публикования: 2015-02-18; Прочитано: 276 | Нарушение авторского права страницы | Мы поможем в написании вашей работы!



studopedia.org - Студопедия.Орг - 2014-2024 год. Студопедия не является автором материалов, которые размещены. Но предоставляет возможность бесплатного использования (0.008 с)...