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

   
На этом шаге мы рассмотрим перегрузку функций.

   
Цель перегрузки функций состоит в том, чтобы функция с одним именем по-разному выполнялась и возвращала разные значения при обращении к ней с разными по
типам и количеству фактическими параметрами. Например, может потребоваться функция, возвращающая максимальное из значений элементов одномерного массива,
передаваемого ей в качестве параметра. Массивы, использованные как фактические параметры, могут содержать элементы разных типов, но пользователь функции не
должен беспокоиться о типе результата. Функция всегда должна возвращать значение того же типа, что и тип массива - фактического параметра.

   
Для обеспечения перегрузки функций необходимо для каждого имени определить, сколько разных функций связано с ним, т.е. сколько вариантов сигнатур допустимы при обращении к ним.
Предположим, что функция выбора максимального значения элемента из массива должна работать для массивов типа int, long, float, double. В этом случае придется написать четыре разных
варианта функции с одним и тем же именем. В следующей программе эта задача решена:

//RAZN6_1.СРР - перегрузка функций.
#include <iostream.h>
long max_element(int n, int array[]) 
// Функция для массивов с элементами типа int.
{ 
  int value = array[0];     
  for (int i = 1; i < n; i++)	
    value = value > array [i] ? value : array [i] ;
  cout << "\nДля (int)    : ";
  return long(value);
}

long max_element(int n, long array[]) 
// Функция для массивов с элементами типа long.
{ 
  long value = array[0];    
  for (int i = 1; i < n; i++)	
    value = value > array[i] ? value : array[i];
  cout << "\nДля (long)   : ";
  return value;
}

double max_element(int n, float array[]) 
// Функция для массивов с элементами типа float.
{ 
  float value = array[0];   
  for (int i = 1; i < n; i++)	
    value = value > array[i] ? value : array[i];
  cout << "\nДля (float)  : ";
  return double(value);
}

double max_element(int n, double array[]) 
// Функция для массивов с элементами типа double.
{ 
  double value = array[0];  
  for (int i = 1; i < n; i++)	
    value = value > array[i] ? value : array[i];
  cout << "\nДля (double) : ";
  return value;
}

void main()
{ 
  int x[] = { 10, 20, 30, 40, 50, 60 };
  long f[] = { 12L, 44L, 5L, 22L, 37L, 30L }; 
  float y[] = { 0.1, 0.2, 0.3, 0.4, 0.5, 0.6 }; 
  double z[] = { 0.01, 0.02, 0.03, 0.04, 0.05, 0.06 }; 
  cout << "max_elem(6,x) = " << max_element(6,x); 
  cout << "max_elem(6,f) = " << max_element(6,f); 
  cout << "max_elem(6,y) = " << max_element(6,y); 
  cout << "max elem(6,z) = " << max_element(6,z);
}

Текст этой программы можно взять Предыдущий шаг
Содержание

Следующий шаг
-->



Вы можете оставить комментарий, или Трекбэк с вашего сайта.

Оставить комментарий