Dalam tutorial ini, kita akan belajar tentang operator overloading dengan bantuan contoh.
Di C ++, kita dapat mengubah cara kerja operator untuk tipe yang ditentukan pengguna seperti objek dan struktur. Ini dikenal sebagai kelebihan beban operator . Sebagai contoh,
Misalkan kita telah membuat tiga objek c1, c2 dan hasil dari kelas bernama Complex
yang mewakili bilangan kompleks.
Karena kelebihan beban operator memungkinkan kita untuk mengubah cara kerja operator, kita dapat mendefinisikan kembali cara kerja +
operator dan menggunakannya untuk menambahkan bilangan kompleks c1 dan c2 dengan menulis kode berikut:
result = c1 + c2;
bukannya sesuatu seperti
result = c1.addNumbers(c2);
Ini membuat kode kami intuitif dan mudah dimengerti.
Catatan: Kita tidak bisa menggunakan operator overloading untuk jenis data fundamental seperti int
, float
, char
dan sebagainya.
Sintaks untuk C ++ Operator Overloading
Untuk membebani operator, kami menggunakan operator
fungsi khusus .
class className (… public returnType operator symbol (arguments) (… )… );
Sini,
returnType
adalah jenis kembalian dari fungsi tersebut.- operator adalah kata kunci.
symbol
adalah operator yang ingin kami overload. Seperti:+
,<
,-
,++
, dllarguments
adalah argumen yang diteruskan ke fungsi tersebut.
Operator Overloading di Unary Operator
Operator unary beroperasi hanya pada satu operan. Operator increment ++
dan operator decrement --
adalah contoh operator unary.
Contoh1: ++ Operator (Unary Operator) Overloading
// Overload ++ when used as prefix #include using namespace std; class Count ( private: int value; public: // Constructor to initialize count to 5 Count() : value(5) () // Overload ++ when used as prefix void operator ++ () ( ++value; ) void display() ( cout << "Count: " << value << endl; ) ); int main() ( Count count1; // Call the "void operator ++ ()" function ++count1; count1.display(); return 0; )
Keluaran
Hitung: 6
Di sini, saat kami menggunakan ++count1;
, void operator ++ ()
disebut. Ini meningkatkan atribut nilai untuk objek count1 sebesar 1.
Catatan: Saat kami membebani operator, kami dapat menggunakannya untuk bekerja sesuka kami. Misalnya, kami dapat ++
meningkatkan nilai sebesar 100.
Namun, ini membuat kode kami membingungkan dan sulit dipahami. Tugas kami sebagai programmer adalah menggunakan operator overloading dengan benar dan dengan cara yang konsisten dan intuitif.
Contoh di atas hanya berfungsi jika ++
digunakan sebagai prefiks. Untuk membuat ++
pekerjaan sebagai postfix kami menggunakan sintaks ini.
void operator ++ (int) ( // code )
Perhatikan bagian int
dalam tanda kurung. Ini sintaks yang digunakan untuk menggunakan operator unary sebagai postfix; itu bukan parameter fungsi.
Contoh 2: ++ Operator (Unary Operator) Overloading
// Overload ++ when used as prefix and postfix #include using namespace std; class Count ( private: int value; public: // Constructor to initialize count to 5 Count() : value(5) () // Overload ++ when used as prefix void operator ++ () ( ++value; ) // Overload ++ when used as postfix void operator ++ (int) ( ++value; ) void display() ( cout << "Count: " << value << endl; ) ); int main() ( Count count1; // Call the "void operator ++ (int)" function count1++; count1.display(); // Call the "void operator ++ ()" function ++ count1; count1.display(); return 0; )
Keluaran
Hitung: 6 Hitung: 7
The Contoh 2 bekerja ketika ++
digunakan baik sebagai awalan dan postfix. Namun, itu tidak berhasil jika kita mencoba melakukan sesuatu seperti ini:
Count count1, result; // Error result = ++count1;
Ini karena tipe kembalian dari fungsi operator kita adalah void
. Kita dapat menyelesaikan masalah ini dengan menjadikan Count
sebagai tipe kembalian dari fungsi operator.
// return Count when ++ used as prefix Count operator ++ () ( // code ) // return Count when ++ used as postfix Count operator ++ (int) ( // code )
Contoh 3: Nilai Pengembalian dari Fungsi Operator (++ Operator)
#include using namespace std; class Count ( private: int value; public : // Constructor to initialize count to 5 Count() : value(5) () // Overload ++ when used as prefix Count operator ++ () ( Count temp; // Here, value is the value attribute of the calling object temp.value = ++value; return temp; ) // Overload ++ when used as postfix Count operator ++ (int) ( Count temp; // Here, value is the value attribute of the calling object temp.value = ++value; return temp; ) void display() ( cout << "Count: " << value << endl; ) ); int main() ( Count count1, result; // Call the "Count operator ++ ()" function result = ++count1; result.display(); // Call the "Count operator ++ (int)" function result = count1++; result.display(); return 0; )
Keluaran
Hitung: 6 Hitung: 7
Di sini, kami telah menggunakan kode berikut untuk overloading operator prefiks:
// Overload ++ when used as prefix Count operator ++ () ( Count temp; // Here, value is the value attribute of the calling object temp.value = ++value; return temp; )
Kode untuk overloading operator postfix juga sama. Perhatikan bahwa kita telah membuat temp objek dan mengembalikan nilainya ke fungsi operator.
Perhatikan juga kodenya
temp.value = ++value;
Nilai variabel milik objek count1 main()
karena count1 memanggil fungsi, sedangkan temp.value milik objek temp.
Overloading Operator di Operator Biner
Operator biner mengerjakan dua operan. Sebagai contoh,
result = num + 9;
Di sini, +
adalah operator biner yang bekerja pada operan num dan 9
.
Saat kami membebani operator biner untuk tipe yang ditentukan pengguna dengan menggunakan kode:
obj3 = obj1 + obj2;
Fungsi operator dipanggil menggunakan objek obj1 dan obj2 diberikan sebagai argumen ke fungsi tersebut.
Contoh 4: C ++ Binary Operator Overloading
// C++ program to overload the binary operator + // This program adds two complex numbers #include using namespace std; class Complex ( private: float real; float imag; public: // Constructor to initialize real and imag to 0 Complex() : real(0), imag(0) () void input() ( cout <> real; cin>> imag; ) // Overload the + operator Complex operator + (const Complex& obj) ( Complex temp; temp.real = real + obj.real; temp.imag = imag + obj.imag; return temp; ) void output() ( if (imag < 0) cout << "Output Complex number: " << real << imag << "i"; else cout << "Output Complex number: " << real << "+" << imag << "i"; ) ); int main() ( Complex complex1, complex2, result; cout << "Enter first complex number:"; complex1.input(); cout << "Enter second complex number:"; complex2.input(); // complex1 calls the operator function // complex2 is passed as an argument to the function result = complex1 + complex2; result.output(); return 0; )
Keluaran
Memasukkan bilangan kompleks pertama: Masukkan bagian nyata dan imajiner masing-masing: 9 5 Masukkan bilangan kompleks kedua: Masukkan bagian nyata dan imajiner masing-masing: 7 6 Keluaran Bilangan kompleks: 16 + 11i
Dalam program ini, fungsi operatornya adalah:
Complex operator + (const Complex& obj) ( // code )
Alih-alih ini, kami juga bisa menulis fungsi ini seperti:
Complex operator + (Complex obj) ( // code )
Namun,
- using
&
membuat kode kita efisien dengan mereferensikan objek complex2 daripada membuat objek duplikat di dalam fungsi operator. - menggunakan
const
dianggap sebagai praktik yang baik karena mencegah fungsi operator memodifikasi kompleks2.

Hal yang Perlu Diingat di C ++ Operator Overloading
- Dua operator
=
dan&
sudah kelebihan beban secara default di C ++. Misalnya, untuk menyalin objek yang sekelas, kita bisa langsung menggunakan=
operator. Kami tidak perlu membuat fungsi operator. - Beban berlebih operator tidak dapat mengubah prioritas dan asosiasi operator. Namun, jika kita ingin mengubah urutan evaluasi, gunakan tanda kurung.
- Ada 4 operator yang tidak dapat kelebihan beban di C ++. Mereka:
::
(resolusi lingkup).
(pemilihan anggota).*
(pemilihan anggota melalui penunjuk ke fungsi)?:
(operator terner)
Kunjungi halaman ini untuk mempelajari lebih lanjut tentang:
- Bagaimana cara membebani operator kenaikan dengan cara yang benar?
- Bagaimana cara membebani operator biner - untuk mengurangi bilangan kompleks?