ОБЪЕКТНО-ОРИЕНТИРОВАННОЕ ПРОГРАММИРОВАНИЕ В 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, автоматически; но преобразование, включающее в себя созданные пользовате- лем типы, требует немного работы со стороны программиста. Мы рассмотрим преобразование типов во второй части этой главы.
Перегрузка операций — непростая тема. Мы обсудим некоторые нюансы ее использования в конце главы.
12 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36
