Практикум по объектно-ориентированному программированию на базе языка с++ Учебно-методическое пособие



Pdf көрінісі
бет15/44
Дата21.02.2024
өлшемі0.49 Mb.
#492719
түріПрактикум
1   ...   11   12   13   14   15   16   17   18   ...   44
ООП С

 
 


29 
ЛАБОРАТОРНАЯ РАБОТА № 6. 
ПЕРЕГРУЗКА ОПЕРАЦИЙ. ДРУЖЕСТВЕННЫЕ ФУНКЦИИ 
Ключевые слова: перегрузка операторов, перегрузка по умолча-
нию, friend-функции. 
Цель: приобрести опыт перегрузки операторов для пользователь-
ских типов. 
C++ позволяет переопределить действие большинства операций 
так, чтобы при использовании с объектами конкретного класса они вы-
полняли заданные функции. Эта дает возможность использовать соб-
ственные типы данных точно так же, как стандартные. Обозначения соб-
ственных операций вводить нельзя. Можно перегружать любые опера-
ции, существующие в C++, за исключением следующих: 
:: – разрешение области видимости, 
. – выбор элемента класса, 
.* – выбор элемента класса через указатель на элемент, 
?: – условный оператор, 
 # – директива препроцессора, 
 sizeof 
 typeid 
Перегрузка операций осуществляется с помощью методов специ-
ального вида (функций-операций) и подчиняется следующим правилам: 
 нельзя переопределять операторы над встроенными типами; 
 должно сохраняться предопределенное число аргументов операции; 
Если операция унарная, то ее нельзя переопределить как бинарную
и наоборот: 
 нельзя изменить предопределенный приоритет операторов; 
 нельзя изменить синтаксические правила для выражений; 
 нельзя ввести новые лексемы для обозначения операций; 
 функции-операции не могут иметь аргументов по умолчанию; 
 функции-операции наследуются (за исключением =); 
 функции-операции не могут определяться как static; 
 Четыре предопределенные операции «+, –, *, &» могут использо-
ваться как бинарные, так и унарные. 
Ограничения: операции «=, (), [], ->» могут быть переопределены 
только нестатическими элементами-функциями класса. 
30 
Операторную функцию можно определить, как функцию-элемент, 
а можно как обычную функцию. В варианте, являющемся элементом, все-
гда будет на один параметр меньше, поскольку неявно используется ука-
затель this. Целесообразно предоставлять глобальной операторной функ-
ции доступ к закрытым элементам класса, т. е. делать ее другом этого 
класса. 
Функция-операция содержит ключевое слово operator, за которым 
следует знак переопределяемой операции: 
тип operatorоперация (список параметров) {тело функции} 
Унарная функция-операция, определяемая внутри класса, должна 
быть представлена с помощью нестатического метода без параметров, 
при этом операндом является вызвавший ее объект. 
Операции постфиксного инкремента и декремента должны иметь 
фиктивный параметр типа int. Он используется только для того, чтобы 
отличить их от префиксной формы. 
Бинарная функция-операция, определяемая внутри класса, должна 
быть представлена с помощью нестатического метода с параметрами, при 
этом вызвавший ее объект считается первым операндом: 
Можно определить перегруженные операции вызова функции
с различным количеством аргументов. 
Для операторной функции-элемента требуется, чтобы ее левый опе-
ранд был объектом ее класса. Если для операции требуется левый операнд 
другого типа, то операторная функция не должна быть элементом. Если
в ней требуется доступ к необщим элементам класса, то ее нужно объявить 
как друга класса. Например, перегрузка операции вывода в поток. 


Достарыңызбен бөлісу:
1   ...   11   12   13   14   15   16   17   18   ...   44




©dereksiz.org 2024
әкімшілігінің қараңыз

    Басты бет