Not
Bu sayfaya erişim yetkilendirme gerektiriyor. Oturum açmayı veya dizinleri değiştirmeyi deneyebilirsiniz.
Bu sayfaya erişim yetkilendirme gerektiriyor. Dizinleri değiştirmeyi deneyebilirsiniz.
Yönetilen türler için kullanıcı tanımlı işleçlere statik üye veya örnek üyesi olarak ya da genel kapsamda izin verilir. Ancak, Visual C++ dışında bir dilde yazılmış istemciler için meta veriler aracılığıyla yalnızca statik işleçlere erişilebilir.
Referans türünde, statik kullanıcı tanımlı bir işlecin parametrelerinden biri, şunlardan biri olmalıdır:
Kapsayan türün bir örneğine yönelik tanıtıcı (
type^).İçerik türünün bir örneğine erişim için bir tutucuya yönelik başvuru türü dolaylı olarak belirtilir
(^& veya tür^%).
Değer türünde, statik kullanıcı tanımlı işlecin parametrelerinden biri şunlardan biri olmalıdır:
Kapsayan değer türüyle aynı türde.
Kapsayan türe işaretçi türü dolaylılık (
type^).Kapsayan türe dolaylı bir başvuru türü (
type% veyatype&).Referans türü bir dolaylılık (
type^% veyatype^&) tanıtıcıya.
Aşağıdaki işleçleri tanımlayabilirsiniz:
| Operatör | Tekli/İkili Formlar? |
|---|---|
| ! | Tekli |
| != | İkilik |
| % | İkilik |
| & | Tekil ve İkili |
| && | İkilik |
| * | Tekli ve İkili |
| + | Unary ve Binary |
| ++ | Tekil |
| , | İkilik |
| - | Tekli ve İkili |
| -- | Üniter |
| -> | Ünery |
| / | İkilik |
| < | İkilik |
| << | İkilik |
| <= | İkilik |
| = | İkilik |
| == | İkilik |
| > | İkilik |
| >= | İkilik |
| >> | İkilik |
| ^ | İkilik |
| yanlış | Tekli |
| doğru | Tekil |
| |
İkilik |
|| |
İkilik |
| ~ | Tekli |
Örnek: Kullanıcı tanımlı işleçler
// 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
Örnek: İşleç sentezi
Aşağıdaki örnek, yalnızca derlemek için /clr kullanıldığında kullanılabilen işleç sentezini gösterir. İşleç sentezi, tanımlanmamışsa, atama işlecinin sol tarafının CLR türüne sahip olduğu bir ikili işlecin atama biçimini oluşturur.
// 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