Share via


Overloading operator

Kata operator kunci mendeklarasikan fungsi yang menentukan arti simbol operator apa saat diterapkan ke instans kelas. Ini memberi operator lebih dari satu arti, atau "kelebihan beban" itu. Pengkompilasi membedakan antara arti operator yang berbeda dengan memeriksa jenis operand-nya.

Sintaks

typeoperatoroperator-symbol(parameter-list)

Keterangan

Anda dapat menentukan ulang fungsi sebagian besar operator bawaan secara global atau berdasarkan kelas demi kelas. Operator yang kelebihan beban diimplementasikan sebagai fungsi.

Nama operator yang kelebihan beban adalah operatorx, di mana x adalah operator seperti yang muncul dalam tabel berikut. Misalnya, untuk membebani operator penambahan secara berlebihan, Anda menentukan fungsi yang disebut operator+. Demikian pula, untuk membebani operator penambahan/penugasan, +=, tentukan fungsi yang disebut operator+=.

Operator yang Dapat Ditentukan Ulang

Operator Nama Jenis
, Koma Biner
! LOGIS NOT Unary
!= Ketidaksetaraan Biner
% Modulus Biner
%= Penetapan modulus Biner
& Bitwise AND Biner
& Alamat Unary
&& Logika AND Biner
&= Penugasan BITWISE AND Biner
( ) Panggilan Fungsi
( ) Cast Operator Unary
* Perkalian Biner
* Dereferensi penunjuk Unary
*= Penugasan perkalian Biner
+ Tambahan Biner
+ Unary Plus Unary
++ Kenaikan 1 Unary
+= Penugasan penambahan Biner
- Pengurangan Biner
- Negasi unary Unary
-- Keputusan 1 Unary
-= Penugasan pengurangan Biner
-> Pilihan anggota Biner
->* Pilihan pointer-to-member Biner
/ Divisi Biner
/= Penugasan divisi Biner
< Kurang dari Biner
<< Shift kiri Biner
<<= Penetapan shift kiri Biner
<= Kurang dari atau sama dengan Biner
= Penugasan Biner
== Persamaan Biner
> Lebih dari Biner
>= Lebih dari atau sama dengan Biner
>> Shift kanan Biner
>>= Penetapan shift kanan Biner
[ ] Subskrip array
^ Eksklusif ATAU Biner
^= Penugasan OR Eksklusif Biner
| Bitwise inklusif ATAU Biner
|= Penugasan OR inklusif bitwise Biner
|| Logika OR Biner
~ Pelengkap seseorang Unary
delete Delete
new Baru
operator konversi operator konversi Unary

1 Dua versi operator kenaikan dan penurunan unary ada: preincrement dan postincrement.

Lihat Aturan Umum untuk Kelebihan Beban Operator untuk informasi selengkapnya. Batasan pada berbagai kategori operator yang kelebihan beban dijelaskan dalam topik berikut:

Operator yang diperlihatkan dalam tabel berikut tidak dapat kelebihan beban. Tabel ini mencakup simbol prapemrosan # dan ##.

Operator yang tidak dapat diredefinasi

Operator Nama
. Pilihan anggota
.* Pilihan pointer-to-member
:: Resolusi cakupan
? : Kondisional
# Preprocessor dikonversi ke string
## Penggalian praproscesor

Meskipun operator yang kelebihan beban biasanya dipanggil secara implisit oleh kompilator ketika mereka ditemui dalam kode, operator dapat dipanggil secara eksplisit dengan cara yang sama seperti anggota atau fungsi nonmember disebut:

Point pt;
pt.operator+( 3 );  // Call addition operator to add 3 to pt.

Contoh

Contoh berikut membebani + operator untuk menambahkan dua bilangan kompleks dan mengembalikan hasilnya.

// operator_overloading.cpp
// compile with: /EHsc
#include <iostream>
using namespace std;

struct Complex {
   Complex( double r, double i ) : re(r), im(i) {}
   Complex operator+( Complex &other );
   void Display( ) {   cout << re << ", " << im << endl; }
private:
   double re, im;
};

// Operator overloaded using a member function
Complex Complex::operator+( Complex &other ) {
   return Complex( re + other.re, im + other.im );
}

int main() {
   Complex a = Complex( 1.2, 3.4 );
   Complex b = Complex( 5.6, 7.8 );
   Complex c = Complex( 0.0, 0.0 );

   c = a + b;
   c.Display();
}
6.8, 11.2

Di bagian ini

Baca juga

Operator, Prioritas, dan Asosiatif Bawaan C++
Kata kunci