Catatan
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba masuk atau mengubah direktori.
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba mengubah direktori.
Operator yang ditentukan pengguna untuk jenis terkelola diizinkan sebagai anggota statis atau anggota instans, atau pada cakupan global. Namun, hanya operator statis yang dapat diakses melalui metadata ke klien yang ditulis dalam bahasa selain Visual C++.
Dalam jenis referensi, salah satu parameter operator statis yang ditentukan pengguna harus salah satunya:
Handel (
type^) ke instans tipe pembungkus.Tipe referensi tidak langsung (
type^& atau tipe^%) ke handle ke instance tipe pembungkus.
Dalam jenis nilai, salah satu parameter operator statis yang ditentukan pengguna harus salah satunya:
Dengan jenis yang sama dengan tipe nilai yang melingkupi.
Tipe penunjuk tidak langsung (
type^) ke jenis penutup.Tipe referensi tidak langsung (
type% atautype&) ke jenis penutup.Indireksi tipe referensi (
type^% atautype^&) ke handle.
Anda dapat menentukan operator berikut:
| Pengoperasi | Bentuk Unary/Binary? |
|---|---|
| ! | Unari |
| != | Biner |
| % | Biner |
| & | Unary dan Biner |
| && | Biner |
| * | Unary dan Biner |
| + | Unary dan Biner |
| ++ | Unari |
| , | Biner |
| - | Unary dan Biner |
| -- | Unari |
| -> | Unari |
| / | Biner |
| < | Biner |
| << | Biner |
| <= | Biner |
| = | Biner |
| == | Biner |
| > | Biner |
| >= | Biner |
| >> | Biner |
| ^ | Biner |
| salah | Unari |
| benar | Unari |
| |
Biner |
|| |
Biner |
| ~ | Unari |
Contoh: Operator yang ditentukan pengguna
// 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
Contoh: Sintesis operator
Sampel berikut menunjukkan sintesis operator, yang hanya tersedia saat Anda menggunakan /clr untuk mengkompilasi. Sintesis operator menciptakan bentuk penugasan untuk operator biner, jika belum ada bentuk yang ditentukan, di mana sisi kiri dari operator penugasan memiliki tipe CLR.
// 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