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

operator ключевое слово объявляет определение функции, operator-symbol означает применяется к экземплярам класса.Это предоставляет оператор более одного или "перегружает".Компилятор делает различия между разными смыслями оператора, изучив типы его операндов.

type operator operator-symbol ( parameter-list )

Заметки

Можно переопределить функцию большинство встроенных операторов глобально или на базовый класс -- класса.Перегруженные операторы реализованы как функции.

Имя перегруженного оператора operatorx, где x оператор как он отображается в следующей таблице.Например, чтобы перегружать оператор сложения, можно задать функцию operator+.Аналогично, перегружать оператор сложения и назначения +=определите функцию operator+=.

Redefinable операторы

Оператор

Имя

Тип

,

Comma

Binary

!

Логическое НЕ

Унарный

!=

Неравенство

Binary

%

Модуль

Binary

%=

Назначение модуля

Binary

&

Побитовое И

Binary

&

Взятия адреса

Унарный

&&

Логическое И

Binary

&=

Побитовое И

Binary

( )

Вызов функции

( )

Оператор приведения

Унарный

*

Умножение

Binary

*

Разыменовывает указатель

Унарный

*=

назначение умножения

Binary

+

Сложение

Binary

+

Унарный плюс

Унарный

++

Приращение 1

Унарный

+=

назначение сложения

Binary

Вычитание

Binary

Унарное отрицание

Унарный

––

Уменьшение 1

Унарный

–=

назначение вычитания

Binary

–>

Выбор члена

Binary

–>*

Выделение Указатель-к-участника

Binary

/

Деление

Binary

/=

Назначение деления

Binary

<

Меньше

Binary

<<

Сдвиг влево

Binary

<<=

Назначение левого миграции

Binary

<=

Меньше или равно

Binary

=

Присваивание

Binary

==

Равенство

Binary

>

Больше

Binary

>=

Больше или равно

Binary

>>

Сдвиг вправо

Binary

>>=

Правое назначения миграции

Binary

[ ]

Индекс массива

^

Исключающее ИЛИ

Binary

^=

Исключающее ИЛИ назначение

Binary

|

Побитовое включающее ИЛИ

Binary

|=

Побитовое включающее ИЛИ назначение

Binary

||

Логическое ИЛИ

Binary

~

Дополнение до единицы

Унарный

delete

Delete

new

New

conversion operators

операторы преобразования

Унарный

1 2 Версии унарных операторов увеличение и декремента существует: preincrement и postincrement.

См. Общие правила перегрузки операторов для получения дополнительных сведений.Ограничения на разных категориях перегруженных операторов описаны в следующих разделах:

Операторы, приведенные в следующей таблице, не могут быть перегружены.Таблица включает в себя символы препроцессора # и ##.

Операторы Nonredefinable

Operator

Name

.

Выбор члена

.*

Выделение Указатель-к-участника

::

Разрешение области

? :

Условная

#

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

##

Препроцессор сцепляет

Хотя перегруженные операторы, как правило, вызываются неявно компилятором, когда они обнаружены в коде, их можно вызвать явным образом одинаково, что вызывающие любой функции участника или nonmember:

Point pt;
pt.operator+( 3 );  // Call addition operator to add 3 to pt.

Пример

В следующем примере перегружает + оператор, чтобы добавить 2 комплексного числа и возвращает результат.

// operator_overloading.cpp
// compile with: /EHsc
#include <iostream>
using namespace std;

struct Complex {
   Complex( double r, double i ) : re(r), im(i) {}
   Complex operator+( Complex &other );
   void Display( ) {   cout << re << ", " << im << endl; }
private:
   double re, im;
};

// Operator overloaded using a member function
Complex Complex::operator+( Complex &other ) {
   return Complex( re + other.re, im + other.im );
}

int main() {
   Complex a = Complex( 1.2, 3.4 );
   Complex b = Complex( 5.6, 7.8 );
   Complex c = Complex( 0.0, 0.0 );

   c = a + b;
   c.Display();
}

Output

6.8, 11.2

См. также

Ссылки

Операторы C++

Ключевые слова C++