Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Dop_Prog_функ.doc
Скачиваний:
0
Добавлен:
01.07.2025
Размер:
241 Кб
Скачать
☆

2.10 Перегруженные функции и шаблоны функций

Перегруженные функции – это функции, которые имеют одинако­вое имя, но различаются по типам и по количеству передаваемых в них параметров.

Распознавание перегруженных функций при вызове выполняется только по сигнатурам (списку формальных параметров функции). Для обеспечения перегрузки необходимо для каждого имени определить, сколько разных функций связано с ним.

Пример 2.10

#include <stdio.h>

int FF(int x,int y) {return x*x+y*y;}

long FF(long x, long y) {return x*x+y*y;}

float FF(float x, float y) {return x*x+y*y;}

int main()

{int a1=3,a2=4,a3;

a3=FF(a1,a2);

long b1=20,b2=400,b3;

b3=FF(b1,b2);

float d1=5.5,d2=7.5,d3;

d3=FF(d1,d2);

printf("a3=%d b3=%ld d3=%.2f\n", a3,b3,d3);

return 0;}

Пример 2.11

#include <stdio.h>

double mul(double x)

{return x*x*x;}

double mul(double x,double y)

{return x*y*y;}

double mul(double x,double y,double z)

{return x*y*z;}

int main()

{double M1=mul(0.2);

double M2=mul(0.2,0.4);

double M3=mul(0.2,0.3,0.4);

printf("M1=%.2lf M2=%.2lf M3=%.2lf\n", M1,M2,M3);

return 0; }

Для автоматизации создания функций различного вида (в т.ч. и перегруженных) в С++ введены шаблоны функций. Определяется шаблон семейства функций следующим образом

template <class type1,class type2, class type3 …>

где type1, type2, type3. – формальные параметры шаблона, которы­ми можно обозначать тип возвращаемого значения, типы формальных и локальных параметров внутри функции.

При компиляции программы с шаблоном функции, компилятор при вызове функции доопределяет ее (создает перегруженные функции).

Свойства параметров шаблонов:

  1. Имена параметров шаблона должны быть уникальными во всем определении шаблона;

  2. Список параметров шаблона не может быть пустым;

  3. Объявление каждого параметра должно начинаться со слова class;

  4. Имя параметра шаблона имеет свойства и права типа, т.е. его именем можно называть типы формальных параметров, тип функции, типы локальных переменные функции. Область видимости параметра шаблона во всем определении функции;

  5. Все параметры шаблона, используемыев определении функции, должны быть обязательно использованы в сигнатуре функции. Т.е. недопустимо, например, определение

template <class A,class B>

B func(A x){…} // Ошибка, параметр В не использован

// в спецификации формальных параметров

Пример 2.12

template <class Tip>

Tip max(Tip x, Tip y )

{if(x>y)return x;

return y;}

int main()

{int a1=-7, a2=40,res1;

res1=max(a1,a2);

float f1=-3.6,f2=-10.5,res2;

res2=max(f1,f2);

printf("res1=%d res2=%.1f\n",res1,res2);

return 0; }

Функция, содержащая параметры, определяемые в шаблоне, может содержать любое количество не параметризованных формаль­ных параметров и возвращать не параметризованное значение.

Пример 2.13

template <class T>

int func_max(T x[], int n)

{T m=x[0]; int k=0;

for(int i=0; i<n; i++)

if(x[i]>max){max=x[i]; k=i;}

return k;}

int main()

{int arr[5]={5,12,40,23,4}, in1, in2;

in1=func_max(arr,5);

printf(“max1=arr[%d]=%d \n”,in1,arr[in1]);

float mas[4]={5.3,1.2,4.0,20.3};

in2=func_max(mas,4);

printf(“max2=mas[%d]=%.2f\n”,in2,arr[in2]);

return 0;}

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]