Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Лекция_04.pdf
Скачиваний:
7
Добавлен:
10.02.2015
Размер:
182.57 Кб
Скачать

Лекция 4. ПЕРЕГРУЗКА ОПЕРАТОРОВ ДЛЯ ОБЪЕКТОВ КЛАССОВ

После определения объектов-членов и функций-членов класса довольно часто возникает

 

необходимость в определении на множестве его объектов некоторых операторов. Для их

 

обозначения программисту разрешается использовать ряд операторов языкаC++. Т. о., один

 

и тот же оператор может быть применен для обозначения операций, определенных над

 

объектами различных классов. Такое свойство

языкаC++ называется

перегрузкой

 

операторов.

 

 

 

 

 

 

 

 

 

Вообще

термин «перегрузка» в программировании

применяется

к

 

функциям. Он

 

обозначает механизм, позволяющий в пределах общей области видимости определять более

 

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

 

результата и/или типами и количеством формальных аргументов. Такие

одноименные

 

функции

называются

перегруженными. Запрещается

наличие

двух

функций

с

эквивалентными заголовками. Примеры прототипов перегруженных функций:

 

 

 

 

 

 

 

 

 

 

 

 

// перегруженные функции OverloadedExample1() :

 

 

 

 

 

 

 

int OverloadedExample1(const int p1, const double d2); //(1)

 

 

 

 

 

 

int OverloadedExample1(const int p);

//(2)

 

 

 

 

 

 

void OverloadedExample1(int * pp1, const double d2);

//(3)

 

 

 

 

 

 

// неразрешенные варианты перегрузки:

 

 

 

 

 

 

 

//int OverloadedExample1(const int R);

//(4)

 

 

 

 

 

 

 

 

 

 

 

 

 

 

//int OverloadedExample1(const int R0, int u1 = 0);

//(5)

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Варианты (1)–(3) – допустимы, т. к. отличаются составом и/или количеством формальных аргументов. Кроме того, вариант (3) отличается от двух первых типом возвращаемого результата. Вариант (4) недопустим, т. к. полностью совпадает с вариантом(2); разница в имени формального аргумента не имеет значения. Вариант (5) вызовет неоднозначность в случае попытки вызова с одним фактическим аргументом, т.к. при этом возможен и вызов функции (2).

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

4.1.Общие сведения о перегрузке операторов

Вкачестве обозначений операторов над объектами классов разрешается использовать следующие обозначения операторов языка C++:

Некоторые операторы, которые не могут быть перегружены в классах:

Программист не имеет возможности изменения приоритета перегруженного оператора в выражениях. Кроме того, нельзя изменять предопределенное число операндов для конкретного оператора. Так, например, оператор инкремента может быть лишь унарным.

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