Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
тюмгу / Лекции КБ ИБАС 1 курс 2 семестр / лекция3 Безопасность 2018.ppt
Скачиваний:
15
Добавлен:
08.12.2019
Размер:
251.9 Кб
Скачать

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

В C++ несколько функций могут иметь одно и то же имя. В этом случае функция, идентифицируемая этим именем, называется перегруженной. Перегрузить можно только функции, которые отличаются либо типом, либо числом своих аргументов. Перегрузить функции, которые отличаются только типом возвращаемого значения, нельзя. Перегружаемые функции дают возможность упростить программы, допуская обращение к одному имени для выполнения близких по смыслу действий.

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

аргументов. 1

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

2

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

3

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

На перегруженные функции накладываются несколько ограничений:

•любые две перегруженные функции должны иметь различные списки параметров;

•перегрузка функций с совпадающими списками аргументов на основе лишь типа возвращаемых ими значений недопустима;

•функции-члены не могут быть перегружены исключительно на основе того, что одна из них является статической, а другая – нет;

•типы "массив" и "указатель" рассматриваются как идентичные с точки зрения перегрузки;

•typedef-определения не влияют на механизм перегрузки, так как они не вводят новых типов данных, а определяют

лишь синонимы для существующих типов.

4

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

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

template<class Т> Т mах(Т а, Т b) {if (а > b) return(а);

else return(b); }

Буква T в данном случае представляет собой общий тип шаблона.

5

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

После определения шаблона внутри вашей программы вы объявляете прототипы функций для каждого требуемого

вам типа. В случае шаблона mах следующие прототипы создают функции типа float и int.

float max(float, float); int max(int, int);

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

6

Пример программы использующей шаблон mах для создания функции типа int и float.

#include <iostream.h> template<class T> Т mах(Т а, Т b) { if (a > b) return(a);

else return(b); }

float max(float, float); int max(int, int);

void main(void)

{cout << "Максимум 100 и 200 равен "

<<max(100, 200) << endl;

cout << "Максимум 5.4321 и 1.2345 равен «

<< max(5.4321, 1.2345) << endl; }

7

 

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

В процессе компиляции компилятор C++ автоматически создает операторы для построения одной функции, работающей с типом int, и второй функции, работающей с типом float. Поскольку компилятор C++ управляет операторами, соответствующими функциям, он позволяет использовать одинаковые имена для функций, которые возвращают значения разных типов. Это нельзя сделать, используя перегрузку функций.

8

Шаблоны, которые используют несколько типов

Предыдущее определение шаблона для функции max использовало единственный общий тип Т. Очень часто в шаблоне функции требуется указать несколько типов. Например, следующие операторы создают шаблон для функции show_array, которая выводит элементы массива. Шаблон использует тип Т для определения типа массива и

тип Т1 для указания типа параметра count: template<class T, class T1>

void show_array(T *array,T1 count)

{ T1 index;

for (index =0; index < count; index++)

cout << array[index] << ' ';

cout << endl;}

9

 

Шаблоны, которые используют несколько типов

Как и ранее, программа должна указать прототипы функций для требуемых типов:

void show_array(int *, int);

void show_array(float *, unsigned);

10