Sdílet prostřednictvím


Přetěžování operátoru

Klíčové operator slovo deklaruje funkci určující, co operátor-symbol znamená při použití na instance třídy. Tím operátoru dává více významů nebo "přetížení". Kompilátor rozlišuje mezi různými významy operátoru tím, že zkoumá typy svých operandů.

Syntaxe

typeoperatoroperator-symbol(parameter-list)

Poznámky

Funkci většiny předdefinovaných operátorů můžete předefinovat globálně nebo podle třídy. Přetížené operátory se implementují jako funkce.

Název přetíženého operátoru je operatorx, kde x je operátor, jak se zobrazuje v následující tabulce. Pokud chcete například přetížit operátor sčítání, definujete funkci s názvem operator+. Podobně pokud chcete přetížit operátor sčítání/přiřazení, +=definujte funkci s názvem operator+=.

Redefinovatelné operátory

Operátor Name Type
, Comma Binární
! Logická HODNOTA NOT Unární
!= Nerovnost Binární
% Numerický zbytek (modulo) Binární
%= Přiřazení modulus Binární
& Bitový operátor AND Binární
& Adresa Unární
&& Logický operátor AND Binární
&= Přiřazení bitového operátoru AND Binární
( ) Volání funkce
( ) Operátor přetypování Unární
* Násobení Binární
* Dereference ukazatele Unární
*= Přiřazení násobení Binární
+ Součet Binární
+ Unární plus Unární
++ Přírůstek 1 Unární
+= Přiřazení sčítání Binární
- Odčítání Binární
- Unární negace Unární
-- Dekrement 1 Unární
-= Přiřazení odčítání Binární
-> Výběr člena Binární
->* Výběr ukazatele na člena Binární
/ Divize Binární
/= Přiřazení dělení Binární
< Je menší než Binární
<< Posun doleva Binární
<<= Přiřazení posunu doleva Binární
<= Menší než nebo rovno Binární
= Přiřazení Binární
== Rovnost Binární
> Je větší než Binární
>= Větší než nebo rovno Binární
>> Posun doprava Binární
>>= Přiřazení pravého posunu Binární
[ ] Dolní index pole
^ Výhradní OR Binární
^= Výhradní přiřazení OR Binární
| Bitový inkluzivní operátor OR Binární
|= Přiřazení s bitovým operátorem OR Binární
|| Logický operátor OR Binární
~ Doplněk Unární
delete Odstranění
new Nová
operátory převodu operátory převodu Unární

1 Existují dvě verze unárních operátorů přírůstku a dekrementace: preinkrementace a postinkrementace.

Další informace najdete v tématu Obecná pravidla pro přetížení operátoru . Omezení různých kategorií přetížených operátorů jsou popsána v následujících tématech:

Operátory uvedené v následující tabulce nelze přetížit. Tabulka obsahuje symboly # preprocesoru a ##.

Nedefinovatelné operátory

Operátor Název
. Výběr člena
.* Výběr ukazatele na člena
:: Rozlišení rozsahu
? : Podmíněné
# Preprocesor převést na řetězec
## Zřetězení preprocesoru

I když jsou přetížené operátory obvykle volány implicitně kompilátorem, když jsou zjištěny v kódu, lze je vyvolat explicitně stejným způsobem jako jakýkoli člen nebo nečlenná funkce je volána:

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

Příklad

Následující příklad přetíží + operátor tak, aby sčítá dvě komplexní čísla a vrátil výsledek.

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

V této části

Viz také

Integrované operátory C++, jejich priorita a asociativita
Klíčová slova