Przeładowanie operatora
Słowo operator
kluczowe deklaruje funkcję określającą, co oznacza operator-symbol po zastosowaniu do wystąpień klasy. Daje to operatorowi więcej niż jedno znaczenie lub "przeciąża". Kompilator rozróżnia różne znaczenia operatora, sprawdzając typy jego operandów.
Składnia
type
operator
operator-symbol ( lista-parametrów )
Uwagi
Funkcję większości wbudowanych operatorów można zdefiniować globalnie lub na podstawie klasy. Przeciążone operatory są implementowane jako funkcje.
Nazwa przeciążonego operatora to operator
x, gdzie x jest operatorem, jak pokazano w poniższej tabeli. Na przykład aby przeciążyć operator dodawania, należy zdefiniować funkcję o nazwie operator+. Podobnie, aby przeciążyć operator dodawania/przypisania, +=zdefiniuj funkcję o nazwie operator+=.
Operatory możliwe do ponownego zdefiniowania
Operator | Nazwisko | Typ |
---|---|---|
, | Comma | Plik binarny |
! | Not logiczny | Jednoargumentowy |
!= | Nierówność | Plik binarny |
% | Modulo | Plik binarny |
%= | Modulo i przypisanie | Plik binarny |
& | Bitowe AND | Plik binarny |
& | Adres | Jednoargumentowy |
&& | AND logiczne | Plik binarny |
&= | Bitowe AND i przypisanie | Plik binarny |
( ) | Wywoływanie funkcji | — |
( ) | Operator rzutowania | Jednoargumentowy |
* |
Mnożenie | Plik binarny |
* |
Wyłusczenie wskaźnika | Jednoargumentowy |
*= |
Mnożenie i przypisanie | Plik binarny |
+ | Dodatek | Plik binarny |
+ | Jednoargumentowy plus | Jednoargumentowy |
++ | Przyrost 1 | Jednoargumentowy |
+= | Dodawanie i przypisanie | Plik binarny |
- | Odejmowanie | Plik binarny |
- | negacja jednoargumentowa | Jednoargumentowy |
-- | Dekrementacja 1 | Jednoargumentowy |
-= | Odejmowanie i przypisanie | Plik binarny |
-> | Wybór elementu członkowskiego | Plik binarny |
->* |
Wybór wskaźnika do elementu członkowskiego | Plik binarny |
/ | Dział | Plik binarny |
/= | Dzielenie i przypisanie | Plik binarny |
< | Mniejsze niż | Plik binarny |
<< | Przesunięcie w lewo | Plik binarny |
<<= | Przypisanie przesunięcia w lewo | Plik binarny |
<= | Mniejsze niż lub równe | Plik binarny |
= | Przypisywanie | Plik binarny |
== | Równość | Plik binarny |
> | Większe niż | Plik binarny |
>= | Większe niż lub równe | Plik binarny |
>> | Przesunięcie w prawo | Plik binarny |
>>= | Przypisywanie przesunięcia w prawo | Plik binarny |
[ ] | Indeks dolny tablicy | — |
^ | Wyłączny LUB | Plik binarny |
^= | Przypisanie na wyłączność LUB | Plik binarny |
| | Bitowe alternatywne OR | Plik binarny |
|= | Bitowe OR alternatywne i przypisanie | Plik binarny |
|| | OR logiczne | Plik binarny |
~ | Uzupełnienie jedynkowe | Jednoargumentowy |
delete |
Delete | — |
new |
Nowe | — |
operatory konwersji | operatory konwersji | Jednoargumentowy |
1 Istnieją dwie wersje operatorów przyrostu jednoargumentowego i dekrementacji: wstępne zwiększanie i przyrost.
Aby uzyskać więcej informacji, zobacz Ogólne reguły przeciążania operatorów. Ograniczenia dotyczące różnych kategorii przeciążonych operatorów opisano w następujących tematach:
Operatory pokazane w poniższej tabeli nie mogą być przeciążone. Tabela zawiera symbole # preprocesora i ##.
Operatory niezdefiniowalne
Operator | Nazwisko |
---|---|
. | Wybór elementu członkowskiego |
.* |
Wybór wskaźnika do elementu członkowskiego |
:: | Rozpoznawanie zakresu |
? : | Warunkowe |
# | Preprocesor konwertuj na ciąg |
## | Łączenie preprocesora |
Mimo że przeciążone operatory są zwykle wywoływane niejawnie przez kompilator po napotkaniu ich w kodzie, można je wywołać jawnie w taki sam sposób, jak każda funkcja składowa lub inna niż liczba jest wywoływana:
Point pt;
pt.operator+( 3 ); // Call addition operator to add 3 to pt.
Przykład
Poniższy przykład przeciąża operator, + aby dodać dwie liczby zespolone i zwrócić wynik.
// 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
W tym obszarze
Zobacz też
Wbudowane operatory, pierwszeństwo i kojarzenie języka C++
Słowa kluczowe
Opinia
https://aka.ms/ContentUserFeedback.
Dostępne już wkrótce: W 2024 r. będziemy stopniowo wycofywać zgłoszenia z serwisu GitHub jako mechanizm przesyłania opinii na temat zawartości i zastępować go nowym systemem opinii. Aby uzyskać więcej informacji, sprawdź:Prześlij i wyświetl opinię dla