|
Автор: Пьянков Денис ИТП-3-08 |
|
|
Перегрузка функции – это использование в программе одного имени для обозначения разных функций. Использование одного имени для обозначения разных функций, выполняющих сходные действия, делает программу более понятной и уменьшает сложность программирования. Например, можно в программе иметь несколько функций сортировки с одинаковыми именами sort, выполняющих сортировку массивов разных типов. Перегрузка функции ассоциирует одно имя со схожими действиями. Чтобы перегрузить функцию, надо записать в программе все варианты одноименных функций, которые будут использоваться. Перегруженные функции должны отличаться друг от друга типом хотя бы одного формального параметра и (или) количеством параметров. Компилятор, анализируя аргументы функции в ее вызове, будет связывать вызов с конкретной перегруженной функцией. Иными словами: компилятор по контексту использо-вания имени функции связывает вызов функции с нужным вариантом одноименной функции. Пример программы удаления из двух массивов, массива целых чисел и массива строк, элементов с заданными значениями. Алгоритмы ввода, вывода и удаления элементов массивов оформлены в виде перегруженных функций. #include <iostream.h>
#include <conio.h>
#include <string.h>
void input (int a[], int n); //ввод массива целых чисел
void input (char a[][81], int n); //ввод массива слов
void output (int a[], int n); //вывод массива целых чисел
void output (char a[][81], int n); //вывод массива слов
void del (int a[], int &n, int x); //удаление из массива чисел х
void del (char a[][81], &n, char x[]); //удаление из массива слов х
void main()
{
int c[100]; //массив чисел
char s[100][15]; //массив строк
int nc, ns; //количества чисел в массивах чисел и строк
int xc; //значение удаляемых чисел
char xs[15]; //значение удаляемых строк
cout « "nc?";
cin » nc;
input(c,nc);
output(c,nc);
cout « "xc?";
cin » xc;
del(c,nc,xc);
output(c,nc);
cout « "ns?";
cin » ns;
input(s,ns);
output(s,ns);
cout « "xs?";
cin » xs;
del (s,ns,xs);
output(s,ns);
getch();
}
//Перегруженные функции
void input (int a[ ], int n)
{
cout « "array int: ";
for int = 0; i < n; ++i)
{
cin » a[i];
}
}
void input (char a[][15], int n)
{
cout « "array string: ";
for int = 0; i < n; ++i)
{
cin » a[i];
}
}
void output (int a[ ], int n)
{
if (n == 0)
{
cout « " array is empty" « endl;
}
else
{
for (int i = 0; i < n; i++)
{
cout « a[i] « ' ';
}
cout « endl;
}
}
void output (char a[ ][15], int n)
{
if (n == 0)
{
cout « " array is empty" « endl;
}
else
{
for (int i = 0; i < n; ++i)
{
cout « a[i] « ' ';
}
cout « endl;
}
}
void del (int a[ ], int &n, int x)
{
int i, j;
j = 0;
for (i = 0; i < n; ++i)
{
if (a[i] != x)
{
a[j] = a[i];
j++;
}
n=j;
}
}
void del (char a[ ][81], &n, char x[ ])
{
int i, j;
j=0;
for (i = 0; i < n; i++)
{
if (strcmp(a[i],x) != 0)
{
strcpy(a[j],a[i]);
j++;
}
n = j;
}
}
Пример программы вычисления площадей круга и прямоугольника. Алгоритмы вычисления площадей геометрических фигур оформлены в виде перегруженных функций. Перегруженные функции различаются количеством параметров. #include <iostream.h>
#include <conio.h>
#include <math.h>
float area (float r); //вычисление площади круга
float area (float w, float h); //вычисление площади прямоугольника
void main()
{
cout « "s1 = " « area(3,4) « " s2 = " « area(5);
getch();
}
float area (float r)
{
return M_PI * r* r;
}
float area (float w, float h)
{
return w*h;
}
|