Практическое занятие 10. Перегрузка функций. Шаблоны функций

 

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

 

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

При вызове перегруженной функции компилятор С++ осу­ществляет разрешение перегрузки (resolution) – выбор соответ­ствующей функции путём анализа количества, типов и порядка следования фактических параметров в её вызове. Перегруженные функции различаются с помощью их сигнатуры – комбинации имени функции и типов её параметров. Тип возвращаемого функцией значения при разрешении перегрузки не учитывается.

В листинге 10.1 рассмотрен пример перегрузки функций.

 

// Листинг 10.1. Использование перегруженных функций

#include <iostream>

using namespace std;

 

int square(int x) {

cout << "int ";

return x*x;

}

double square(double y) {

cout << "double ";

return y*y;

}

int main() {

// Квадрат целого числа 7

cout << square(7) << endl;

// Квадрат числа 7. типа double

cout << square(7.) << endl;

return 0;

}

 

Результат выполнения программы:

int 49

double 49

 

Перегруженные функции не обязательно должны иметь одинаковое количество параметров. Создание перегруженных функций с идентичными списками параметров и различными типами возвращаемых значений приводит к синтаксической ошибке. Например, если попытаться в С++ перегрузить функции Max() таким образом:

 

double Max(int x, int y) {

return (x > y)? x: y;

}

 

int Max(int x, int y) {

return (x > y)? x: y;

}

 

компилятор выдаст сообщения об ошибках:

 

error C2371: 'Max': redefinition; different basic types

error C2556: 'int Max(int,int)': overloaded function differs only by return type from 'double Max(int,int)'

 

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

 

double Max(double, double);

int Max(int, int);

char * Max(char *, char *);

int Max(char *, int);

double Max(double, double, double);

int Max(int, int, int);

 


Понравилась статья? Добавь ее в закладку (CTRL+D) и не забудь поделиться с друзьями:  



double arrow
Сейчас читают про: