Notitie
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen u aan te melden of de directory te wijzigen.
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen de mappen te wijzigen.
Door de gebruiker gedefinieerde operators voor beheerde typen zijn toegestaan als statische leden of exemplaarleden, of in globale bereik. Alleen statische operators zijn echter toegankelijk via metagegevens voor clients die zijn geschreven in een andere taal dan Visual C++.
In een verwijzingstype moet een van de parameters van een statische door de gebruiker gedefinieerde operator een van de volgende zijn:
Een verwijzing (
type^) naar een exemplaar van het omsluitende type.Een indirectie van een verwijzingstype (
type^& of type^%) naar een verwijzing naar een instantie van het omsluittype.
In een waardetype moet een van de parameters van een statische door de gebruiker gedefinieerde operator een van de volgende zijn:
Van hetzelfde type als het omhullende waardetype.
Een aanwijzertype indirectie (
type^) naar het omsluittype.Een verwijzingstype indirectie (
type% oftype&) naar het omsluittype.Een indirectie van het verwijzingstype (
type^% oftype^&) naar de handle.
U kunt de volgende operators definiƫren:
| Operateur | Unaire/binaire vormen? |
|---|---|
| ! | Unaire |
| != | Binaire |
| % | Binaire |
| & | Unary en Binary |
| && | Binaire |
| * | Unary en Binary |
| + | Unary en Binary |
| ++ | Unaire |
| , | Binaire |
| - | Unary en Binary |
| -- | Unaire |
| -> | Unaire |
| / | Binaire |
| < | Binaire |
| << | Binaire |
| <= | Binaire |
| = | Binaire |
| == | Binaire |
| > | Binaire |
| >= | Binaire |
| >> | Binaire |
| ^ | Binaire |
| onwaar | Unaire |
| waar | Unaire |
| |
Binaire |
|| |
Binaire |
| ~ | Unaire |
Voorbeeld: Door de gebruiker gedefinieerde operators
// 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
Voorbeeld: Operator synthese
In het volgende voorbeeld ziet u operatorsynthese, die alleen beschikbaar is wanneer u /clr gebruikt om te compileren. De operatorsynthese maakt de toewijzingsvorm van een binaire operator, als deze niet is gedefinieerd, waarbij de linkerkant van de toewijzingsoperator een CLR-type heeft.
// 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