Przeładowanie operatoraOperator overloading

operator Słowo kluczowe deklaruje funkcję określającą symbol operatora , gdy jest stosowany do wystąpień klasy.The operator keyword declares a function specifying what operator-symbol means when applied to instances of a class. Daje to operatorowi więcej niż jedno znaczenie lub "przeciążenia".This gives the operator more than one meaning, or "overloads" it. Kompilator rozróżnia różne znaczenia operatora, sprawdzając typy jego operandów...The compiler distinguishes between the different meanings of an operator by examining the types of its operands.

SkładniaSyntax

Typ operator operator-— symbol ( Lista parametrów )type operator operator-symbol ( parameter-list )

UwagiRemarks

Można ponownie zdefiniować funkcję większości wbudowanych operatorów globalnie lub w oparciu o klasę klasy.You can redefine the function of most built-in operators globally or on a class-by-class basis. Przeciążone operatory są implementowane jako funkcje.Overloaded operators are implemented as functions.

Nazwa przeciążonego operatora to operator x, gdzie x jest operatorem, który pojawia się w poniższej tabeli.The name of an overloaded operator is operator x, where x is the operator as it appears in the following table. Na przykład aby przeciążyć operator dodawania, należy zdefiniować funkcję o nazwie operator +.For example, to overload the addition operator, you define a function called operator+. Podobnie, aby przeciążać operator dodawania/przypisywania, += Zdefiniuj funkcję o nazwie operator + =.Similarly, to overload the addition/assignment operator, +=, define a function called operator+=.

Operatory do przedefiniowaćRedefinable Operators

OperatorOperator NazwaName TypType
,, PrzecinekComma BinarneBinary
!! Operator logiczny NOTLogical NOT JednoargumentowyUnary
!=!= NierównośćInequality BinarneBinary
% ModuloModulus BinarneBinary
%= Modulo i przypisanieModulus assignment BinarneBinary
& Bitowe ORAZBitwise AND BinarneBinary
& AdresAddress-of JednoargumentowyUnary
&& Logiczne ANDLogical AND BinarneBinary
&= Bitowe AND i przypisanieBitwise AND assignment BinarneBinary
( )( ) Wywołanie funkcjiFunction call
( )( ) Operator rzutowaniaCast Operator JednoargumentowyUnary
** MnożenieMultiplication BinarneBinary
** Odwołuje się do wskaźnikaPointer dereference JednoargumentowyUnary
*=*= Mnożenie i przypisanieMultiplication assignment BinarneBinary
+ DodawanieAddition BinarneBinary
+ Jednoargumentowy PlusUnary Plus JednoargumentowyUnary
++ Zwiększ 1Increment 1 JednoargumentowyUnary
+= Dodawanie i przypisanieAddition assignment BinarneBinary
- OdejmowanieSubtraction BinarneBinary
- negacja jednoargumentowaUnary negation JednoargumentowyUnary
-- Zmniejszenie 1Decrement 1 JednoargumentowyUnary
-= Odejmowanie i przypisanieSubtraction assignment BinarneBinary
-> Wybór elementu członkowskiegoMember selection BinarneBinary
->*->* Wybór wskaźnika do elementu członkowskiegoPointer-to-member selection BinarneBinary
/ DziałDivision BinarneBinary
/= Dzielenie i przypisanieDivision assignment BinarneBinary
< Mniejsze niżLess than BinarneBinary
<< Przesunięcie w lewoLeft shift BinarneBinary
<<= Przypisanie przesunięcia w lewoLeft shift assignment BinarneBinary
<= Mniejsze niż lub równeLess than or equal to BinarneBinary
= PrzypisanieAssignment BinarneBinary
== RównośćEquality BinarneBinary
> Większe niżGreater than BinarneBinary
>= Większe niż lub równeGreater than or equal to BinarneBinary
>> Przesunięcie w prawoRight shift BinarneBinary
>>= Przypisanie przesunięcia w prawoRight shift assignment BinarneBinary
[ ][ ] Indeks dolny tablicyArray subscript
^ Wyłączny lubExclusive OR BinarneBinary
^= Wyłączność lub przypisanieExclusive OR assignment BinarneBinary
|| Bitowe alternatywne ORBitwise inclusive OR BinarneBinary
|=|= Bitowe OR alternatywne i przypisanieBitwise inclusive OR assignment BinarneBinary
|||| Logiczne ORLogical OR BinarneBinary
~ Uzupełnienie jedynkoweOne's complement JednoargumentowyUnary
delete UsuńDelete
new NowyNew
operatory konwersjiconversion operators operatory konwersjiconversion operators JednoargumentowyUnary

Istnieją 1 dwie wersje jednoargumentowego przyrostu i zmniejszania: przyrostowe i postinkrementacji.1 Two versions of the unary increment and decrement operators exist: preincrement and postincrement.

Aby uzyskać więcej informacji, zobacz ogólne reguły przeładowania operatora .See General Rules for Operator Overloading for more information. Ograniczenia dotyczące różnych kategorii przeciążonych operatorów są opisane w następujących tematach:The constraints on the various categories of overloaded operators are described in the following topics:

Operatory podane w poniższej tabeli nie mogą być przeciążone.The operators shown in the following table cannot be overloaded. Tabela zawiera symbole preprocesora # i ## .The table includes the preprocessor symbols # and ##.

Operatory NonredefinableNonredefinable Operators

OperatorOperator NazwaName
.. Wybór elementu członkowskiegoMember selection
. *.* Wybór wskaźnika do elementu członkowskiegoPointer-to-member selection
:::: Rozpoznawanie zakresuScope resolution
? :? : WarunkoweConditional
# Konwersja preprocesora na ciągPreprocessor convert to string
## Łączenie preprocesoraPreprocessor concatenate

Chociaż przeciążone operatory są zwykle wywoływane niejawnie przez kompilator, gdy są one napotkane w kodzie, mogą być wywoływane jawnie w taki sam sposób jak każdy element członkowski lub funkcja nieczłonkowska jest wywoływana:Although overloaded operators are usually called implicitly by the compiler when they are encountered in code, they can be invoked explicitly the same way as any member or nonmember function is called:

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

PrzykładExample

Poniższy przykład przeciąża + operatora, aby dodać dwie liczby zespolone i zwraca wynik.The following example overloads the + operator to add two complex numbers and returns the result.

// 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 tej sekcjiIn this section

Zobacz teżSee also

Wbudowane operatory, pierwszeństwo i kojarzenie języka C++C++ Built-in Operators, Precedence and Associativity
Słowa kluczoweKeywords