В «старом» С все имена функций должны быть уникальны в одном проекте. Это плохо и неудобно при работе с функциями, которые выполняют одинаковые или похожие действия с разными типами данных. Классический пример этого – стандартные функции abs(), labs(), fabs(), которые возвращают абсолютное значение, соответственно, целого, длинного целого и вещественного типов.
В С++ можно определить с одним и тем же именем несколько функций, которые отличаются типами параметров и реже их количеством. Тогда говорят, что функции перегружены. Под перегрузкой понимается создание нескольких прототипов и определений функций, имеющих одинаковое имя.
Рассмотрим пример программы, в которой перегружаются две функции с равным числом аргументов и имеющие одинаковые имена. Первая функция int func (int a, int b) определяет сумму двух целых чисел a и b, вторая - float func (float a, float b) – разность двух чисел с плавающей точкой:
#include <iostream.h>
int func (int a, int b); //прототип функции вычисления суммы
float func (float a, float b); //прототип функции вычисления разности
//-------------------------------------------------------------void main ()
{int a=25, b=40;
float c=2.45f, d=6.15f;
cout << “\n summa=” << func (a,b); //вызов функции с аргументами целого типа
cout << “\n raznost=” << func (c,d); //вызов функции с аргументами типа float
}
//-------------------------------------------------------------int func(int a, int b) //определение функции вычисления суммы
{return (a+b);
}
//-------------------------------------------------------------float func(float a, float b) //определение функции вычисления разности
{return (a-b);
}
А теперь рассмотрим пример перегрузки семейства функций, имеющих разное количество параметров.
Функции выполняют вывод на экран символа (заданного в виде аргумента или определенного в функции) некоторое количество раз (заданное в качестве аргумента или определенное в функции):
#include <iostream.h>
void repchar(); //прототип функции для вывода символа ‘*’ 45 раз
void repchar(char); //прототип функции для вывода символа-аргумента 45 раз
void repchar(char, int); //прототип функции для вывода символа-аргумента заданное //через второй аргумент количество раз
//-------------------------------------------------------------int main()
{
repchar(); //вызов функции для вывода символа ‘*’ 45 раз
repchar('='); //вызов функции для вывода символа ‘=’ 45 раз
repchar('+', 30); //вызов функции для вывода символа ‘+’ 30 раз
return 0;
}
//-------------------------------------------------------------void repchar() //определение функции вывода символа ‘*’ 45 раз
{
for(int j=0; j<45; j++)
cout << '*';
cout << endl;
}
//-------------------------------------------------------------void repchar(char ch) //определение функции вывода символа-аргумента 45 раз
{
for(int j=0; j<45; j++)
cout << ch;
cout << endl;
}
//-------------------------------------------------------------void repchar(char ch, int n) //определение функции вывода символа-аргумента заданное {//через второй аргумент количество раз
for(int j=0; j<n; j++)
cout << ch;
cout << endl;
}
Результат работы:
*********************************************
=============================================
++++++++++++++++++++++++++++++
#include <iostream.h>
int rotate (int i);
long rotate (long i);
//-------------------------------------------------------------int main()
{
int a; a=0x8000;
Уважаемый посетитель!
Чтобы распечатать файл, скачайте его (в формате Word).
Ссылка на скачивание - внизу страницы.