Перегрузка функций в Си++ Краткие теоретические сведения Цель перегрузки состоит в том, чтобы функция с одним именем по разному выполнялась и возвращала разные значения при обращении к ней с различными типами и различным числом фактических параметров. Для обеспечения перегрузки функций необходимо для каждого имени функции определить сколько различных функций с ним связано. Пример: #include <iostream.h> int max_element ( int n, int a[ ]) // находит максимальный элемент для массива типа int { int max=a[0]; for ( i=1; i<n; i++) if (a[i]>max) max=a[i]; return max; } long max_element ( int n, long a[ ]) // находит максимальный элемент для массива типа long { long max=a[0]; for ( i=1; i<n; i++) if (a[i]>max) max=a[i]; return max; } double max_element ( int n, double a[ ]) // находит максимальный элемент для массива типа double { double max=a[0]; for ( i=1; i<n; i++) if (a[i]>max) max=a[i]; return max; } float max_element ( int n, float a[ ]) // находит максимальный элемент для массива типа float { float max=a[0]; for ( i=1; i<n; i++) if (a[i]>max) max=a[i]; return max; } void main ( ) { int x[]={10, 20, 30, 40, 50, 60}; long y[]={12L, 44L, 22L, 37L,30L}; ...... int m1=max_element(6, x ); long m2=max_element(5, y); ..... } Полезно знать! При решении задач могут потребоваться дейсвия с комплексными числами. Структура _complex для комплексных чисел описана в файле <cmath>. struct _complex { double x,y; /* real and imaginary parts */ }; То-есть _complex p; p.x = 1; - присваивает действительной части комплексного числа p значение 1. Функции с переменным числом параметров Краткие теоретические сведения В Си допустимы функции, у которых при компиляции не фиксируется число параметров, кроме того, может быть не известен и тип параметров. Количество и тип параметров становится известным только в момент вызова, когда явно задан список фактических параметров. Каждая функция с переменным числом параметров должна иметь хотя бы один обязательный параметр. Определение функции с переменным числом параметров: <тип функции> <имя функции>(<явные параметры>, . . . ) После списка явных параметров ставится запятая, а затем многоточие, которое показывает, что дальнейший контроль соответствия количества и типов параметров при обработке вызова функции производить не нужно. Сложность заключается в определении начала и конца переменного списка параметров, поэтому каждая функция должна иметь механизм определения их количества и типов. Существует два подхода: 1) известен признак конца списка переменных параметров; 2) известно количество параметров, которое передается как обязательный параметр. Пример: #include <iostream.h> int sum (int k, . . .) { int *p = &k; //настроили указатель на параметр k int s=0; for ( ; k!=0;k--) s+=*(++p); return s; } void main( ) { cout<<”\nСумма(2,4,6)= ”<<sum(2,4,6); //находит сумму 4+6 cout<<”\nСумма(4,1,2,3,4)= ”<<sum(4,1,2,3,4); //находит сумму 1+2+3+4 } Для доступа к списку параметров используется указатель *p типа int. Он устанавливается на начало списка параметров в памяти, а затем p перемещается по адресам фактических параметров (++p).