logo search
Шпора по информатике / 002

16.3 О перегрузке функций и операций

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

Компилятор находит нужную функцию по типу фактических параметров при вызове.

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

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

по-разному выполнялась при обращении к ним с различающимися по типам и количеству аргументами. Например, для float x и complex z имеем разные алгоритмы вычисления значений exp(x) и exp (z) и разные типы возвращаемых значений - double и complex соответственно. Многие стандартные функции, как и exp, являются перегруженными. Конструкторы классов также обычно являются перегруженными функциями. Пример перегруженных функций:

# include < iostream.h >

# include < conio.h >

int f (int a ) { return a; }

int f ( int a, float b ) { cout << b <<endl ; return (int) (a*b) ; }

void main ( )

{ cout << f ( 4) << endl << f ( 3, 1.9) ; getch( ); }

Здесь будут вызываться разные функции, хотя их имена совпадают.

Перегрузкой операций называют возможность распространения действия стандартных операций ( например, + - * ) на нестандартные для них операнды. Другими словами, перегрузка операции есть назначение ей другого действия.

Все операции с комплексными числами перегружены и выполняются по правилам, отличным от правил операций для обычных чисел. Нестандартные правила для операций с комплексными числами описываются в классе complex.

Перегружены также операции для работы со строками класса string. Например,

знак + (плюс) для строк означает операцию конкатенации, т.е. соединения строк:

string a ("aa"), b ("bb"), c ("vvvvvv"); c = a + b ; cout << c <<endl;

При выполнении этого фрагмента получим на экране строку

aabb

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

Лекция 17 Введение в систему BUILDER