Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Информатика_и_Пр_Бизнес_лекции.doc
Скачиваний:
85
Добавлен:
10.05.2015
Размер:
1.21 Mб
Скачать

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

Перегрузка функции – это использование в программе одного имени для обозначения разных функций.

Использование одного имени для обозначения разных функций, выполняющих сходные действия, делает программу более понятной и уменьшает сложность программирования. Например, можно в программе иметь несколько функций сортировки с одинаковыми именами 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;

}