Главная Случайная страница Контакты | Мы поможем в написании вашей работы! | ||
|
В “старом” языке С все имена функций должны быть уникальны в одном проекте. Это плохо и неудобно при работе с функциями, которые выполняют одинаковые или похожие действия с разными типами данных. Классический пример этого — стандартные функции с разными именами 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 | Нарушение авторского права страницы | Мы поможем в написании вашей работы!