Apa itu Operator Overloading?
Dengan menggunakan operator overloading di C ++, Anda dapat menentukan lebih dari satu arti untuk operator dalam satu cakupan. Tujuan operator overloading adalah untuk memberikan arti khusus dari operator untuk tipe data yang ditentukan pengguna.
Dengan bantuan operator overloading, Anda dapat mendefinisikan ulang sebagian besar operator C ++. Anda juga dapat menggunakan kelebihan beban operator untuk melakukan operasi yang berbeda menggunakan satu operator.
Dalam tutorial C ++ ini, Anda akan mempelajari:
- Apa itu Operator Overloading?
- Sintaksis
- Pendekatan Berbeda untuk Operator Overloading di C ++
- Apakah Semua Operator C ++ Bisa Overload?
- Hal-hal untuk diingat:
- Aturan untuk Operator Overloading:
- Cara Membebani Operator:
Sintaksis
Untuk membebani operator C ++, Anda harus menentukan fungsi khusus di dalam Kelas sebagai berikut:
class class_name{… publicreturn_type operator symbol (argument(s)){… }… };
Berikut penjelasan sintaks di atas:
- Return_type adalah tipe pengembalian untuk fungsi tersebut.
- Selanjutnya, Anda menyebutkan kata kunci operator.
- Simbol menunjukkan simbol operator kelebihan beban. Misalnya, +, -, <, ++.
- Argumen dapat diteruskan ke fungsi operator dengan cara yang sama seperti fungsi.
Contoh 1:
#includeusing 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;}
Keluaran:
Berikut tangkapan layar kodenya:
Penjelasan Kode:
- Termasuk file header iostream dalam kode kami untuk menggunakan fungsinya.
- Sertakan namespace std dalam program kita untuk menggunakan kelasnya tanpa memanggilnya.
- Buat kelas bernama TestClass.
- Gunakan pengubah akses pribadi, yang menandai anggota kelas sebagai dapat diakses secara pribadi.
- Buat jumlah variabel integer. Variabel ini dapat diakses secara pribadi.
- Gunakan pengubah akses publik, yang menandai anggota kelas sebagai dapat diakses secara pribadi.
- Gunakan konstruktor kelas untuk menginisialisasi penghitung variabel ke 5.
- Membebani arti dari - operator.
- Operator akan menurunkan nilai variabel x dengan 1.
- Akhir dari bagian kelebihan beban operator. Operator telah diberi nama baru.
- Mendefinisikan fungsi bernama fungsi Tampilan ().
- Cetak nilai jumlah variabel bersama teks lain di konsol saat fungsi Display () dipanggil. The} menandai akhir badan fungsi Display ().
- Akhir dari badan kelas.
- Panggil fungsi main (). Logika program harus ditambahkan dalam fungsi ini.
- Buat sebuah instance dari kelas TestClass dan beri nama tc.
- Ini akan memanggil fungsi operator void - ().
- Gunakan sikap TestClass Class untuk memanggil fungsi Display ().
- Fungsi tersebut harus mengembalikan nilai setelah berhasil diselesaikan.
- Akhir badan fungsi main ().
Pendekatan Berbeda untuk Operator Overloading di C ++
Anda dapat melakukan kelebihan beban operator dengan mengimplementasikan salah satu jenis fungsi berikut:
- Fungsi Anggota
- Fungsi Non-Anggota
- Fungsi Teman
- Fungsi kelebihan beban operator dapat menjadi fungsi anggota ketika operan Kiri adalah objek dari Kelas.
- Jika operan Kiri berbeda, fungsi kelebihan beban Operator harus merupakan fungsi non-anggota.
Anda dapat menjadikan fungsi operator overloading sebagai fungsi teman jika perlu mengakses anggota kelas yang privat dan dilindungi.
Apakah Semua Operator C ++ Bisa Overload?
Tidak. Ada operator C ++ yang tidak dapat kelebihan beban.
Mereka termasuk:
- :: Operator resolusi -cope
- ?: -operator alternatif.
- . -pemilih anggota
- Ukuran operator
- * -pemilih penunjuk anggota
Hal-hal untuk diingat:
- Dengan operator overloading, Anda bisa mendefinisikan ulang cara kerja operator hanya untuk tipe yang ditentukan pengguna (objek, struktur). Anda tidak dapat menggunakannya untuk tipe bawaan (float, char, int, dll.).
- Operator = dan & C ++ secara default kelebihan beban. Misalnya, Anda dapat menyalin objek dari Kelas yang sama secara langsung menggunakan operator =.
- Prioritas operator tidak mengubah asosiatif dan presedensi operator. Namun, Anda dapat mengubah urutan evaluasi menggunakan tanda kurung.
- Ada empat operator yang tidak dapat Anda overload di C ++. Mereka termasuk operator resolusi lingkup (: :), operator pemilihan anggota (.), Pemilihan anggota melalui penunjuk ke operator fungsi (. *), Dan operator terner (? :).
Aturan untuk Operator Overloading:
Berikut aturan untuk Operator Overloading:
- Agar berfungsi, setidaknya satu operan harus berupa objek kelas yang ditentukan pengguna.
- Anda hanya dapat membebani operator yang ada. Anda tidak dapat membebani operator baru secara berlebihan.
- Beberapa operator tidak dapat kelebihan beban menggunakan fungsi teman. Namun, operator tersebut dapat kelebihan beban menggunakan fungsi anggota.
Cara Membebani Operator:
Contoh 1:
#includeusing namespace std;class OperatorOverload {private:int x;public:OperatorOverload() : x(10) {}void operator ++() {x = x + 2;}void Print() {cout << "The Count is: " << x;}};int main() {OperatorOverload ov;++ov;ov.Print();return 0;}
Keluaran:
Berikut tangkapan layar kodenya:
Penjelasan Kode:
- Termasuk file header iostream dalam kode kami untuk menggunakan fungsinya.
- Sertakan namespace std dalam program kita untuk menggunakan kelasnya tanpa memanggilnya.
- Buat kelas bernama OperatorOverload.
- Gunakan pengubah akses pribadi, yang menandai anggota kelas sebagai dapat diakses secara pribadi.
- Buat variabel integer x. Variabel ini dapat diakses secara pribadi.
- Gunakan pengubah akses publik, yang menandai anggota kelas sebagai dapat diakses secara pribadi.
- Gunakan konstruktor kelas untuk menginisialisasi variabel x menjadi 10.
- Overload arti dari operator ++.
- Operator akan menambah nilai variabel x dengan 2.
- Akhir dari bagian kelebihan beban operator. Operator telah diberi nama baru.
- Memanggil fungsi Print ().
- Cetak nilai variabel x di samping teks lain di konsol saat fungsi Print () dipanggil.
- Akhir badan fungsi Print ().
- Akhir dari badan kelas.
- Panggil fungsi main (). Logika program harus ditambahkan dalam fungsi ini.
- Buat instance Kelas OperatorOverload bernama ov.
- Ini akan memanggil fungsi void operator ++ ().
- Gunakan sikap kelas OperatorOverload untuk memanggil fungsi Print ().
- Fungsi tersebut harus mengembalikan nilai setelah berhasil diselesaikan.
- Akhir badan fungsi main ().
Contoh 2:
#includeusing 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();}
Keluaran:
Berikut tangkapan layar kodenya:
Penjelasan Kode:
- Termasuk file header iostream ke dalam program kami untuk menggunakan fungsinya.
- Sertakan namespace std ke dalam program kita untuk menggunakan kelasnya tanpa memanggilnya.
- Buat kelas bernama TestClass. Tanda {menandai awal dari badan kelas.
- Gunakan pengubah akses pribadi untuk menandai variabel sebagai pribadi, artinya variabel hanya dapat diakses dari dalam Kelas.
- Tentukan dua variabel integer, real dan over.
- Gunakan pengubah akses publik untuk menandai konstruktor sebagai publik, artinya itu akan dapat diakses bahkan di luar Kelas.
- Membuat konstruktor kelas dan menginisialisasi variabel.
- Inisialisasi nilai variabel nyata.
- Inisialisasi nilai variabel di atas.
- Akhir badan konstruktor.
- Mengesampingkan arti dari operator +.
- Buat hasil tipe data dari tipe TestClass.
- Gunakan operator + dengan bilangan kompleks. Baris ini akan menambahkan bagian nyata dari sebuah bilangan ke bagian nyata dari bilangan lain.
- Gunakan operator + dengan bilangan kompleks. Garis ini akan menambahkan bagian imajiner dari sebuah bilangan ke bagian imajiner dari bilangan lain.
- Program akan mengembalikan nilai hasil variabel setelah eksekusi berhasil.
- Akhir dari definisi arti baru dari + operator, yaitu overloading.
- Panggil metode print ().
- Cetak bilangan kompleks baru setelah penambahan di konsol.
- Akhir badan fungsi print ().
- Akhir badan Kelas TestClass.
- Memanggil fungsi main ().
- Meneruskan nilai bagian nyata dan kompleks yang akan ditambahkan. Bagian pertama dari c1 akan ditambahkan ke bagian pertama dari c2, yaitu 9 + 4. Bagian kedua dari c1 akan ditambahkan ke bagian kedua dari c, yaitu 5 + 3.
- Melakukan operasi menggunakan operator + yang kelebihan beban dan menyimpan hasilnya dalam variabel c3.
- Mencetak nilai variabel c3 di konsol.
- Akhir badan fungsi main ().
Ringkasan:
- Anda dapat menentukan lebih dari satu arti untuk operator C ++ dalam satu cakupan.
- Ini disebut overloading operator.
- Operator overloading memberikan arti khusus dari operator untuk tipe data yang ditentukan pengguna.
- Anda dapat menentukan ulang sebagian besar operator C ++ melalui kelebihan beban operator.
- Tidak semua operator C ++ bisa kelebihan beban.
- Agar operator kelebihan beban, setidaknya salah satu operand harus berupa objek yang ditentukan pengguna.
- Hanya operator yang ada yang bisa kelebihan beban. Anda tidak dapat membebani operator baru secara berlebihan.