Глава 16

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

*

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

Все мы еще со времен начальной школы умеем составлять простые выражения из чисел и знаков типа +, -, * и /. Выражения наподобие 1+2 или 6/3 легко узнаваемы, просты для понимания и благодаря своей почти стенографической нотации быстро воспроизводимы. Многие из нас пользуются этими привычными операциями и в намного более сложном контексте.

Благодаря такому многолетнему опыту, обозначения операций выглядят для нас как старые друзья. Краткость упрощает выражение взаимосвязей между операндами (или переменными). Язык C++ делает еще один шаг в развитии этого столь удобного орудия. C++ позволяет определять взаимосвязи между операциями — такими как сложение, вычитание, логические операции, создание нового объекта — и операндами, обычно объектами.

Эта возможность всегда под рукой, надо только научиться ею пользоваться. Перегрузка операций не тот инструмент, без которого нельзя программировать на C++, но именно он позволяет повысить выразительность и простоту использования ваших классов. В этой главе подробно демонстрируется, как писать собственные оператор-функции; в частности, рассматриваются следующие темы:

• Операции в качестве функций

• Перегружаемые операции

• Расширение операций

• Унарные операции

• Бинарные операции