Автор: Пьянков Денис ИТП-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; } |