Microsoft Visual C++ и MFC. Программирование для Win95 и WinNT


Перегрузка операторов


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

В Си++ вы можете переопределить большинство операторов языка для работы с вашими типами данных. Вот список операторов, которые вы можете переопределить:

!

=

+=



–=

!=

,

–>

–>*

&

|

( )

[ ]

new

delete

>> 

<<=

^=

&=

|=

<< 

>>=

==

~

*=

/=

%=

%

^

+

-

*

/

++

––

<=

>=

&&

Переопределение операторов вызывает перегрузку операторов. Как в случае перегруженных функций и методов, перегруженные операторы вызываются в зависимости от количества и типа их параметров. О перегруженных функциях вы можете прочитать в разделе “Перегрузка имен функций”.

Для переопределения операторов предназначено ключевое слово operator. Вы должны определить функцию или метод, имя которого состоит из ключевого слова operator и самого оператора. Параметры этой функции должны соответствовать параметрам переопределяемого оператора.

Вы можете переопределить оператор для объектов класса, используя соответствующий метод класса или дружественную функцию класса. Когда вы переопределяете оператор с помощью метода класса, то в качестве неявного параметра метод принимает ключевое слово this, являющееся указателем на данный объект класса. Поэтому если переопределяется бинарный оператор, то переопределяющий его метод класса должен принимать только один параметр, а если переопределяется унарный оператор - метод класса вообще не должен иметь параметров.

Если оператор переопределяется при помощи дружественной функции, то он должен принимать два параметра для бинарных операторов и один параметр для унарных операторов.


Существует ряд ограничений, которые вы должны учитывать при переопределении операторов:

  • Нельзя изменять количество параметров оператора. Например, нельзя переопределить унарную операцию как бинарную и наоборот


  • Нельзя изменять старшинство операторов


  • Нельзя определять новые операторы


  • Нельзя переопределять операторы принимающие в качестве параметров стандартные типы данных языка, такие как int или char


  • Переопределенные операторы не могут иметь параметров, используемых по умолчанию


  • Нельзя переопределять следующие операторы: (.), (.*), (::), (?:), а также символы, обрабатываемые препроцессором (символы комментария и т. д.).


  • В нашей первой книге, посвященной языку программирования Си++ и библиотеке классов MFC, мы не будем переопределять операторы. Однако мы будем вызывать операторы, уже переопределенные в классах MFC. Если вы желаете получить больше информации о методике переопределения операторов, обращайтесь к литературе, посвященной языку Си++.


    Содержание раздела