ОБЪЕКТНО-ОРИЕНТИРОВАННОЕ ПРОГРАММИРОВАНИЕ В C++ (4-Е ИЗДАНИЕ) (часть 8) онлайн

Глава 8. Перегрузка операций

Перегрузка унарных операций

Перегрузка бинарных операций

Преобразование типов

UML диаграммы классов

«Подводные камни» перегрузки операций и преобразования типов

Ключевые слова explicit и mutable

Перегрузка операций — это одна из самых захватывающих возможностей ООП. Она может превратить сложный и малопонятный листинг программы в интуи- тивно понятный. Например, строки

d3.addobjects ( d1, d2 );

похожие, но одинаково непонятные

d3 = d1.addobjects ( d2 );

можно заменить на более читаемую

d3 = d1 + d2;

Довольно непривлекательный термин «перегрузка операций» дается обыч- ным операциям C++, таким, как +, *, <= или +=, в случае их применения с опре- деленными пользователем типами данных.

Обычно

а = b + с;

работают только с основными типами данных, такими, как int или float, и попыт- ка использования обычных операторов, когда a, b и с являются объектами опре- деленного пользователем класса, приведет к протестам компилятора. Однако, используя перегрузку, вы можете сделать эту строку правильной даже в том случае, если a, b и с являются объектами определенного пользователем класса.

На самом деле перегрузка операций дает вам возможность переопределить язык C++. Если вы считаете, что ограничены стандартными возможностями операций, то вы можете назначить их выполнять нужные вам действия. Исполь-

зуя классы для создания новых видов переменных и перегрузку для определе- ния новых операций, вы можете, расширив C++, создать новый, свой собствен- ный язык.

Другой вид действий, преобразование типов, тесно связан с перегрузкой опе- раций. C++ совершает преобразование простых типов, таких, как int или float, автоматически; но преобразование, включающее в себя созданные пользовате- лем типы, требует немного работы со стороны программиста. Мы рассмотрим преобразование типов во второй части этой главы.

Перегрузка операций — непростая тема. Мы обсудим некоторые нюансы ее использования в конце главы.

 

2