Operatörsöverlagring

Nyckelordet operator deklarerar en funktion som anger vad operator-symbol betyder när det tillämpas på instanser av en klass. Detta ger operatorn mer än en betydelse, eller "överbelastar" den. Kompilatorn skiljer mellan de olika betydelserna för en operator genom att undersöka typerna av dess operander.

Syntax

typoperatoroperator-symbol(parameter-list)

Anmärkningar

Du kan omdefiniera funktionen för de flesta inbyggda operatorer globalt eller klass för klass. Överbelastade operatorer implementeras som funktioner.

Namnet på en överbelastad operator är operatorx, där x är operatorn som den visas i följande tabell. Om du till exempel vill överbelasta additionsoperatorn definierar du en funktion som kallas operator+. Om du vill överbelasta additions-/tilldelningsoperatorn +=definierar du på samma sätt en funktion som kallas operator+=.

Omdefinierbara operatorer

Operatör Namn Typ
, Komma Binär
! Logiskt INTE Unär
!= Olikhet Binär
% Modulus Binär
%= Modulus-tilldelning Binär
& Bitvis OCH Binär
& Adress till Unär
&& Logiskt OCH Binär
&= Bitvis OCH tilldelning Binär
( ) Funktionssamtal
( ) Gjuten operator Unär
* Multiplikation Binär
* Pekaravreference Unär
*= Multiplikationstilldelning Binär
+ Tillägg Binär
+ Unary Plus Unär
++ Steg 1 Unär
+= Tilläggstilldelning Binär
- Subtraktion Binär
- Unary negation Unär
-- Minskning 1 Unär
-= Subtraktionstilldelning Binär
-> Val av medlem Binär
->* Val av pekare till medlem Binär
/ avdelning Binär
/= Divisionstilldelning Binär
< Mindre än Binär
<< Vänster skifte Binär
<<= Vänster skifttilldelning Binär
<= Mindre än eller lika med Binär
= Uppgift Binär
== Jämlikhet Binär
> Större än Binär
>= Större än eller lika med Binär
>> Höger skift Binär
>>= Höger skifttilldelning Binär
[ ] Matris underordnad
^ Exklusivt ELLER Binär
^= Exklusiv ELLER-tilldelning Binär
| Bitvis inkluderande ELLER Binär
|= Bitvis inkluderande ELLER-tilldelning Binär
|| Logiskt ELLER Binär
~ Ens komplement Unär
delete Ta bort
new Nytt
konverteringsoperatorer konverteringsoperatorer Unär

1 Två versioner av operatorerna unary increment och decrement finns: preincrement och postincrement.

Mer information finns i Allmänna regler för överlagring av operatorer . Begränsningarna för de olika kategorierna av överlagrade operatorer beskrivs i följande avsnitt:

Operatorerna som visas i följande tabell kan inte överbelastas. Tabellen innehåller preprocessorsymbolerna # och ##.

Icke-odefinierbara operatorer

Operatör Namn
. Val av medlem
.* Val av pekare till medlem
:: Omfångsmatchning
? : Villkorlig
# Konvertera förprocessor till sträng
## Sammanfogning av förprocessor

Även om överbelastade operatorer vanligtvis anropas implicit av kompilatorn när de påträffas i kod, kan de anropas explicit på samma sätt som någon medlem eller icke-medlem-funktion anropas:

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

Exempel

I följande exempel överbelastas operatorn + för att lägga till två komplexa tal och returnerar resultatet.

// 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

I det här avsnittet

Se även

C++ Inbyggda operatorer, prioritet och associativitet
nyckelord