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

Автор: Пьянков Денис
ИТП-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;
}
        
Предыдущая страница         Следующая страница
Сайт создан в системе uCoz