Anteckning
Åtkomst till den här sidan kräver auktorisering. Du kan prova att logga in eller ändra kataloger.
Åtkomst till den här sidan kräver auktorisering. Du kan prova att ändra kataloger.
Användardefinierade operatorer för hanterade typer tillåts som statiska medlemmar eller instansmedlemmar eller i globalt omfång. Dock är endast statiska operatorer tillgängliga via metadata för klienter som är skrivna på ett annat språk än Visual C++.
I en referenstyp måste en av parametrarna för en statisk användardefinierad operator vara en av följande:
Ett handtag (
type^) till en instans av den omslutande typen.En indikation av referenstyp (
type^& eller typ^%) till ett handtag till en instans av den omgivande typen.
I en värdetyp måste en av parametrarna för en statisk användardefinierad operator vara en av följande:
Av samma typ som den omslutande värdetypen.
En pekartyp med indirektion (
type^) till den omslutande typen.En indirekt referenstyp (
type% ellertype&) till den omslutande typen.En indirekt referens (
type^% ellertype^&) till handtaget.
Du kan definiera följande operatorer:
| Operatör | Unära/Binära former? |
|---|---|
| ! | Unär |
| != | Binär |
| % | Binär |
| & | Unär och Binär |
| && | Binär |
| * | Unär och Binär |
| + | Unär och Binär |
| ++ | Unär |
| , | Binär |
| - | Unär och Binär |
| -- | Unär |
| -> | Unär |
| / | Binär |
| < | Binär |
| << | Binär |
| <= | Binär |
| = | Binär |
| == | Binär |
| > | Binär |
| >= | Binär |
| >> | Binär |
| ^ | Binär |
| falskt | Unär |
| sann | Unär |
| |
Binär |
|| |
Binär |
| ~ | Unär |
Exempel: Användardefinierade operatorer
// mcppv2_user-defined_operators.cpp
// compile with: /clr
using namespace System;
public ref struct X {
X(int i) : m_i(i) {}
X() {}
int m_i;
// static, binary, user-defined operator
static X ^ operator + (X^ me, int i) {
return (gcnew X(me -> m_i + i));
}
// instance, binary, user-defined operator
X^ operator -( int i ) {
return gcnew X(this->m_i - i);
}
// instance, unary, user-defined pre-increment operator
X^ operator ++() {
return gcnew X(this->m_i++);
}
// instance, unary, user-defined post-increment operator
X^ operator ++(int i) {
return gcnew X(this->m_i++);
}
// static, unary user-defined pre- and post-increment operator
static X^ operator-- (X^ me) {
return (gcnew X(me -> m_i - 1));
}
};
int main() {
X ^hX = gcnew X(-5);
System::Console::WriteLine(hX -> m_i);
hX = hX + 1;
System::Console::WriteLine(hX -> m_i);
hX = hX - (-1);
System::Console::WriteLine(hX -> m_i);
++hX;
System::Console::WriteLine(hX -> m_i);
hX++;
System::Console::WriteLine(hX -> m_i);
hX--;
System::Console::WriteLine(hX -> m_i);
--hX;
System::Console::WriteLine(hX -> m_i);
}
-5
-4
-3
-2
-1
-2
-3
Exempel: Operatorsyntes
Följande exempel visar operatorsyntesen, som endast är tillgänglig när du använder /clr för att kompilera. Operatorsyntes skapar tilldelningsformen för en binär operator, om en inte har definierats, där den vänstra sidan av tilldelningsoperatorn har en CLR-typ.
// mcppv2_user-defined_operators_2.cpp
// compile with: /clr
ref struct A {
A(int n) : m_n(n) {};
static A^ operator + (A^ r1, A^ r2) {
return gcnew A( r1->m_n + r2->m_n);
};
int m_n;
};
int main() {
A^ a1 = gcnew A(10);
A^ a2 = gcnew A(20);
a1 += a2; // a1 = a1 + a2 += not defined in source
System::Console::WriteLine(a1->m_n);
}
30