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

Удобно, когда функции, выполняющие одно и то же действие для разных типов данных, имели бы одно и то же имя.

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

Компилятор определяет, какая функция вызвана по набору аргументов.

Вызов функции должен быть однозначным.

Неоднозначность может возникнуть при:

1. Преобразовании типа

2. Использовании параметров ссылок

3. Использовании параметров по умолчанию

1.

float f(float a);

double f(double a);

int main (void)

{

int a =...;

float b =...;

double c =...;

f (b);

f (c);

f (a); // неоднозначность. возникнет ошибка компиляции

f ((double)a); // таким образом можно устранить неоднозначность

return 0;

}

2.

void f1(int a);

void f1(int&a);

int main (void)

{

int a =...;

f1(a); // неоднозначность

return 0;

}

3.

void f2 (int a);

int f2 (int a, int b=3);

int main (void)

{

int a =...;

f2(a); // неоднозначность

return 0;

}

Функции с параметрами по умолчанию

cin.getline(str,80);

cin.getline(str,80,’!’);

cin.getline(char*p, int n, char simv=’\n’);

// Иногда при объявлении функции, конкретное значение аргумента может быть известно заранее, тогда оно указывается в заголовке функции и не передается при вызове

//Функция может быть вызвана с двумя аргументами, при этом третий принимается по умолчанию. Или с тремя аргументами.

Параметры по умолчанию назначаются с конца списка параметров.

// параметр по умолчанию должен быть последним

+

  1. Шаблоны функций.

Многие алгоритмы не зависят от типов используемых данных.

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

На этапе компиляции явно или по умолчанию передается конкретный тип для замены им параметризованного типа – после этого будет сформирован экземпляр функции, который компилируется и участвует в компоновке всей программы.

Шаблон необходим для формирования текста функции.

Формат функции шаблона

template <class Type>

имя функции

{

// тело функции

}

Type – имя параметризованного типа, который используется в качестве типа параметра или локальной переменной функции.

Параметризованных типов может быть несколько.

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

Пример демонстрирует замену параметризованного типа по умолчанию.

Ставим цель: функция работает для массива любого типа. Тип массива параметризуем или обобщаем –Type.

Тип массива Type

Объявляя другие данные функции, смотрим, связаны ли они по типу с типом массива:

Если да, то их тип тоже Type

Если нет, можно задавать стандартный тип или создать другую параметризацию

#include<iostream>

using namespace std;

template<class Type>

Type MaxMas(type *p, int n)

{

int i;

Type max=p[0];

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

if (max<p[i])

max=p[i];

return max;

}

int main(void)

{

const int N=7;

int M1[N]={3;-2;7};

double M2[N]={3,25;1,7;5,6;7,8;…}; // 7 чисел

int max1;

double max2;

max1=MaxMas(M1,N);

max2=MaxMas(M2,N);

cout<<max1<<endl;

cout<<max2<<endl;

return 0;

}

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