Ескерім
Бұл бетке кіру үшін қатынас шегін айқындау қажет. Жүйеге кіруді немесе каталогтарды өзгертуді байқап көруге болады.
Бұл бетке кіру үшін қатынас шегін айқындау қажет. Каталогтарды өзгертуді байқап көруге болады.
Ключевое operator
слово объявляет функцию, указывающую, что означает оператор-символ при применении к экземплярам класса. Это дает оператору более одного значения — "перегружает" его. Компилятор различает разные значения оператора, проверяя типы его операндов.
Синтаксис
type operator-symbol (параметр-list)
operator
Замечания
Функцию большинства встроенных операторов можно переопределить глобально или для отдельных классов. Перегруженные операторы реализуются в виде функции.
Имя перегруженного оператора — operator
x, где x — оператор, как показано в следующей таблице. Например, чтобы перегрузить оператор сложения, необходимо определить функцию с именем operator+. Аналогичным образом, чтобы перегрузить оператор добавления или назначения, +=определите функцию, называемую оператором +=.
Переопределяемые операторы
Оператор | Имя. | Тип |
---|---|---|
, | 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 |
== | Equality | Binary |
> | Больше | Binary |
>= | Больше или равно | Binary |
>> | Сдвиг вправо | Binary |
>>= | Сдвиг вправо и присваивание | Binary |
[ ] | Индекс массива | — |
^ | Исключающее ИЛИ | Binary |
^= | Исключающее ИЛИ/присваивание | Binary |
| | Побитовое ИЛИ | Binary |
|= | Назначение побитового включающего ИЛИ | Binary |
|| | Логическое ИЛИ | Binary |
~ | Дополнение до единицы | Унарный |
delete |
Удаление | — |
new |
Новый | — |
операторы преобразования | операторы преобразования | Унарный |
1 Две версии унарных операторов добавочного и декремента существуют: preincrement и postincrement.
Дополнительные сведения см . в общих правилах перегрузки операторов. Ограничения для разных категорий перегруженных операторов описываются в следующих разделах.
Операторы, перечисленные в следующей таблице, не могут быть перегружены. Таблица содержит символы # препроцессора и ##.
Непереопределяемые операторы
Оператор | Имя. |
---|---|
. | Выбор члена |
.* |
Выбор указателя на член |
:: | Разрешение области |
? : | Условный |
# | Препроцессор: преобразование в строку |
## | Препроцессор: конкатенация |
Хотя перегруженные операторы обычно называются компилятором неявным образом при их появлении в коде, их можно вызывать и явным образом — точно так же, как и любую функцию-член или функцию, не являющуюся членом.
Point pt;
pt.operator+( 3 ); // Call addition operator to add 3 to pt.
Пример
В следующем примере оператор перегружает + два сложных числа и возвращает результат.
// 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();
}
6.8, 11.2