Function

advertisement
Перегрузка функций в Си++
Краткие теоретические сведения
Цель перегрузки состоит в том, чтобы функция с одним именем по разному выполнялась и
возвращала разные значения при обращении к ней с различными типами и различным
числом фактических параметров. Для обеспечения перегрузки функций необходимо для
каждого имени функции определить сколько различных функций с ним связано.
Пример:
#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).
Download