Operator yang Ditentukan Pengguna (C++/CLI)
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 jenis penutup.Tipe referensi tidak langsung (
type
^& atau ketik^%) ke handel ke instans jenis penutup.
Dalam jenis nilai, salah satu parameter operator statis yang ditentukan pengguna harus salah satunya:
Dengan jenis yang sama dengan jenis nilai yang diapit.
Tipe penunjuk tidak langsung (
type
^) ke jenis penutup.Tipe referensi tidak langsung (
type
% atautype
&) ke jenis penutup.Tipe referensi tidak langsung (
type
^% atautype
^&) ke handel.
Anda dapat menentukan operator berikut:
Operator | Formulir Unary/Binary? |
---|---|
! | Unary |
!= | Biner |
% | Biner |
& | Unary dan Biner |
&& | Biner |
* | Unary dan Biner |
+ | Unary dan Biner |
++ | Unary |
, | Biner |
- | Unary dan Biner |
-- | Unary |
-> | Unary |
/ | Biner |
< | Biner |
<< | Biner |
<= | Biner |
= | Biner |
== | Biner |
> | Biner |
>= | Biner |
>> | Biner |
^ | Biner |
salah | Unary |
benar | Unary |
| |
Biner |
|| |
Biner |
~ | Unary |
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 membuat bentuk penugasan operator biner, jika tidak ditentukan, di mana sisi kiri operator penugasan memiliki jenis 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