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
type
operator
operator-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 operator
x, 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
Váš názor
https://aka.ms/ContentUserFeedback.
Připravujeme: V průběhu roku 2024 budeme postupně vyřazovat problémy z GitHub coby mechanismus zpětné vazby pro obsah a nahrazovat ho novým systémem zpětné vazby. Další informace naleznete v tématu:Odeslat a zobrazit názory pro