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.
Başvuru türünde, statik kullanıcı tanımlı işlecin parametrelerinden biri şunlardan biri olmalıdır:
Kapsayan türün bir örneğine yönelik tanıtıcı (
type^).Kapsayan türün bir örneğine yönelik bir tanıtıcıya başvuru türü dolaylı
type(^& 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 bir işaretçi türü dolaylı (
type^) .Kapsayan türe bir başvuru türü dolaylı işlemi (
type% veyatype&).Tanıtıcıya bir başvuru türü dolaylı (
type^%veyatype^&).
Aşağıdaki işleçleri tanımlayabilirsiniz:
| Operatör | Birli/İkili Formlar? |
|---|---|
| ! | Birli |
| != | İkilik |
| % | İkilik |
| & | Birli ve İkili |
| && | İkilik |
| * | Birli ve İkili |
| + | Birli ve İkili |
| ++ | Birli |
| , | İkilik |
| - | Birli ve İkili |
| -- | Birli |
| -> | Birli |
| / | İkilik |
| < | İkilik |
| << | İkilik |
| <= | İkilik |
| = | İkilik |
| == | İkilik |
| > | İkilik |
| >= | İkilik |
| >> | İkilik |
| ^ | İkilik |
| yanlış | Birli |
| doğru | Birli |
| |
İkilik |
|| |
İkilik |
| ~ | Birli |
Ö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 kullandığınızda 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