Pengoverloadan Operator C++ – Panduan Praktis dengan Contoh Kode
Apa Itu Pengoverloadan Operator? Menggunakan pengoverloadan operator dalam C++, Anda dapat memberikan beberapa makna kepada operator dalam cakupan yang sama. Tujuannya adalah memberikan perilaku kustom kepada operator untuk tipe yang ditentukan pengguna.
Dengan pengoverloadan operator, Anda dapat men-definisi ulang sebagian besar operator C++ dan melakukan operasi berbeda menggunakan satu simbol.
Dalam tutorial ini Anda akan mempelajari:
Apa itu pengoverloadan operator Sintaks Pendekatan berbeda untuk overload operator dalam C++ Operator mana yang tidak dapat di-overload Pertimbangan utama Aturan untuk pengoverloadan operator Cara overload operator dalam praktik Sintaks Untuk overload operator C++, definisikan fungsi anggota khusus di dalam kelas sebagai berikut:
class class_name { ... public: return_type operator symbol (argument(s)) { ... } ... }; Komponennya adalah:
return_type – tipe yang dikembalikan oleh fungsi operator. operator – kata kunci yang memulai deklarasi. symbol – operator yang ingin Anda overload, misalnya +, -, <, ++. argument(s) – parameter, seperti fungsi lainnya. Contoh 1: #include <iostream> using namespace std; class TestClass { private: int count; public: TestClass() : count(5) {} void operator --() { count = count - 3; } void Display() { cout << "Count: " << count; } }; int main() { TestClass tc; --tc; tc.Display(); return 0; } Output:
Berikut adalah screenshot kode:
Penjelasan Kode:
Sertakan <iostream> untuk mengakses fasilitas input/output. Gunakan namespace std untuk kesingkatannya. Definisikan kelas TestClass. Buat count sebagai anggota data privat. Berikan konstruktor publik yang menginisialisasi count ke 5. Overload operator prefix -- untuk mengurangi 3 dari count. Implementasikan Display() untuk mencetak nilai saat ini. Di dalam main(), buat instance, terapkan operator yang di-overload, dan tampilkan hasilnya. Pendekatan Berbeda untuk Pengoverloadan Operator dalam C++ Overloading dapat dicapai melalui:
Fungsi anggota Fungsi non-anggota (fungsi teman atau bebas) Fungsi teman (ketika akses ke data privat diperlukan) Jika operand kiri adalah objek dari kelas, biasanya digunakan fungsi anggota. Ketika operand kiri adalah tipe yang berbeda, diperlukan fungsi non-anggota. Fungsi teman berguna ketika operator perlu mengakses anggota privat atau terlindungi. Dapatkah Semua Operator C++ Di-overload? Tidak. Operator berikut tidak dapat di-overload:
:: – resolusi cakupan ?: – kondisional ternary . – akses anggota sizeof – kueri ukuran * (pilih pointer anggota) Hal yang Perlu Diingat Overloading hanya mempengaruhi tipe yang ditentukan pengguna; tipe bawaan mempertahankan perilaku aslinya. Operator penugasan (=) dan alamat (&) secara otomatis di-overload untuk kelas yang menyediakan konstruktor salinan atau operator penugasan. Precedensi operator tidak berubah; Anda dapat menggunakan kurung untuk memberlakukan urutan evaluasi. Tiga operator—::, ., ?:—secara eksplisit dilarang di-overload. Aturan untuk Pengoverloadan Operator Setidaknya satu operand harus berupa tipe kelas yang ditentukan pengguna. Hanya operator yang sudah ada yang dapat di-overload; Anda tidak dapat memperkenalkan simbol operator baru. Beberapa operator (misalnya, new, delete) tidak dapat di-overload sebagai fungsi teman tetapi dapat di-overload sebagai fungsi anggota. Cara Overload Operator Contoh 1: Operator Inkremen #include <iostream> using namespace std; class OperatorOverload { private: int x; public: OperatorOverload() : x(10) {} void operator ++() { x += 2; } void Print() { cout << "The Count is: " << x; } }; int main() { OperatorOverload ov; ++ov; ov.Print(); return 0; } Output:
Screenshot kode:
Penjelasan Kode:
Sertakan <iostream> dan gunakan namespace std. Definisikan kelas OperatorOverload dengan int x privat. Konstruktor menginisialisasi x ke 10. Overload operator prefix ++ untuk menambahkan 2 ke x. Implementasikan Print() untuk menampilkan nilai yang diperbarui. Di dalam main(), buat objek, panggil operator yang di-overload, dan cetak hasilnya. Contoh 2: Penjumlahan Bilangan Kompleks #include <iostream> using namespace std; class TestClass { private: int real, over; public: TestClass(int rl = 0, int ov = 0) : real(rl), over(ov) {} TestClass operator + (TestClass const &obj) { TestClass result; result.real = real + obj.real; result.over = over + obj.over; return result; } void print() { cout << real << " + i" << over << endl; } }; int main() { TestClass c1(9, 5), c2(4, 3); TestClass c3 = c1 + c2; c3.print(); } Output:
Screenshot kode:
Penjelasan Kode:
Sertakan <iostream> dan gunakan namespace std. Definisikan TestClass dengan komponen real dan over. Berikan konstruktor untuk inisialisasi. Overload operator + untuk melakukan penjumlahan bilangan kompleks. Kembalikan instance TestClass baru yang berisi jumlahnya. Implementasikan print() untuk menampilkan bilangan kompleks. Di dalam main(), buat dua instance, tambahkan mereka, dan cetak hasilnya. Ringkasan Pengoverloadan operator memungkinkan beberapa makna untuk operator dalam cakupan. Ini memberikan perilaku kustom untuk tipe yang ditentukan pengguna. Sebagian besar operator C++ dapat di-overload, tetapi beberapa tidak dapat. Setidaknya satu operand harus berupa tipe yang ditentukan pengguna. Hanya operator yang sudah ada yang dapat di-overload.