Menguasai Overloading C++: Fungsi & Operator Dijelaskan
C++ memungkinkan Anda untuk menentukan lebih dari satu definisi untuk nama fungsi atau operator dalam cakupan yang sama, yang disebut fungsi overloading dan operator overloading masing-masing.
Deklarasi yang di-overload adalah deklarasi yang dideklarasikan dengan nama yang sama seperti deklarasi yang sebelumnya dideklarasikan dalam cakupan yang sama, kecuali bahwa kedua deklarasi memiliki argumen yang berbeda dan tentu saja definisi (implementasi) yang berbeda.
Saat Anda memanggil fungsi atau operator yang di-overload, compiler menentukan definisi yang paling tepat untuk digunakan, dengan membandingkan tipe argumen yang Anda gunakan untuk memanggil fungsi atau operator dengan tipe parameter yang ditentukan dalam definisi. Proses memilih fungsi atau operator yang di-overload yang paling tepat disebut resolusi overload.
Fungsi Overloading dalam C++
Anda dapat memiliki beberapa definisi untuk nama fungsi yang sama dalam cakupan yang sama. Definisi fungsi harus berbeda satu sama lain berdasarkan tipe dan/atau jumlah argumen dalam daftar argumen. Anda tidak dapat overload deklarasi fungsi yang hanya berbeda berdasarkan tipe pengembalian.
Berikut adalah contoh di mana fungsi yang sama print() digunakan untuk mencetak tipe data yang berbeda minus–
Live Demo
#include <iostream> using namespace std; class printData { public: void print(int i) { cout << "Mencetak int: " << i << endl; } void print(double f) { cout << "Mencetak float: " << f << endl; } void print(char* c) { cout << "Mencetak karakter: " << c << endl; } }; int main(void) { printData pd; // Panggil print untuk mencetak integer pd.print(5); // Panggil print untuk mencetak float pd.print(500.263); // Panggil print untuk mencetak karakter pd.print("Hello C++"); return 0; }
Ketika kode di atas dikompilasi dan dieksekusi, menghasilkan hasil berikut minus–
Mencetak int: 5 Mencetak float: 500.263 Mencetak karakter: Hello C++
Operator Overloading dalam C++
Anda dapat mendefinisikan ulang atau overload sebagian besar operator bawaan yang tersedia dalam C++. Oleh karena itu, programmer dapat menggunakan operator dengan tipe yang ditentukan pengguna juga.
Operator yang di-overload adalah fungsi dengan nama khusus: kata kunci "operator" diikuti oleh simbol operator yang didefinisikan. Seperti fungsi lainnya, operator yang di-overload memiliki tipe pengembalian dan daftar parameter.
Box operator+(const Box&);
mendeklarasikan operator penjumlahan yang dapat digunakan untuk menambahkan dua objek Box dan mengembalikan objek Box akhir. Sebagian besar operator yang di-overload dapat didefinisikan sebagai fungsi non-anggotanya biasa atau sebagai fungsi anggota kelas. Jika kita mendefinisikan fungsi di atas sebagai fungsi non-anggotanya dari kelas maka kita harus melewatkan dua argumen untuk setiap operand sebagai berikut minus–
Box operator+(const Box&, const Box&);
Berikut adalah contoh untuk menunjukkan konsep operator overloading menggunakan fungsi anggota. Di sini objek dilewatkan sebagai argumen yang propertinya akan diakses menggunakan objek ini, objek yang akan memanggil operator ini dapat diakses menggunakan operator this seperti dijelaskan di bawah minus–
Live Demo
#include <iostream> using namespace std; class Box { public: double getVolume(void) { return length * breadth * height; } void setLength( double len ) { length = len; } void setBreadth( double bre ) { breadth = bre; } void setHeight( double hei ) { height = hei; } // Overload operator + untuk menambahkan dua objek Box. Box operator+(const Box& b) { Box box; box.length = this->length + b.length; box.breadth = this->breadth + b.breadth; box.height = this->height + b.height; return box; } private: double length; // Panjang kotak double breadth; // Lebar kotak double height; // Tinggi kotak }; // Fungsi utama untuk program int main() { Box Box1; // Deklarasi Box1 tipe Box Box Box2; // Deklarasi Box2 tipe Box Box Box3; // Deklarasi Box3 tipe Box double volume = 0.0; // Simpan volume kotak di sini // spesifikasi kotak 1 Box1.setLength(6.0); Box1.setBreadth(7.0); Box1.setHeight(5.0); // spesifikasi kotak 2 Box2.setLength(12.0); Box2.setBreadth(13.0); Box2.setHeight(10.0); // volume kotak 1 volume = Box1.getVolume(); cout << "Volume Box1 : " << volume <<endl; // volume kotak 2 volume = Box2.getVolume(); cout << "Volume Box2 : " << volume <<endl; // Tambahkan dua objek sebagai berikut: Box3 = Box1 + Box2; // volume kotak 3 volume = Box3.getVolume(); cout << "Volume Box3 : " << volume <<endl; return 0; }
Ketika kode di atas dikompilasi dan dieksekusi, menghasilkan hasil berikut minus–
Volume Box1 : 210 Volume Box2 : 1560 Volume Box3 : 5400
Operator yang Dapat/Tidak Dapat Di-overload
Berikut adalah daftar operator yang dapat di-overload minus–
| + | - | * | / | % | ^ |
| & | | | ~ | ! | , | = |
| < | > | <= | >= | ++ | -- |
| << | >> | == | != | && | || |
| += | -= | /= | %= | ^= | &= |
| |= | *= | <<= | >>= | [] | () |
| -> | ->* | new | new [] | delete | delete [] |
Berikut adalah daftar operator, yang tidak dapat di-overload minus–
Contoh Operator Overloading
Berikut adalah berbagai contoh operator overloading untuk membantu Anda memahami konsep ini.
| No.Urut | Operator & Contoh |
| 1 | Overloading Operator Unary |
| 2 | Overloading Operator Biner |
| 3 | Overloading Operator Relasional |
| 4 | Overloading Operator Input/Output |
| 5 | Overloading Operator ++ dan -- |
| 6 | Overloading Operator Penugasan |
| 7 | Overloading Operator Panggilan Fungsi () |
| 8 | Overloading Operator Subskrip [] |
| 9 | Overloading Operator Akses Anggota Kelas -> |