Bagikan melalui


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% atau type&) ke jenis penutup.

  • Tipe referensi tidak langsung (type^% atau type^&) 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

Baca juga

Kelas dan Struktur