OPERATOR OVERLOADING The ability to provide the operators with a special meaning for a data type but its original meaning is not lost. Example: Operator + can be overloaded to add two vectors, two strings and can still be used to add two integers. Syntax definition: return_type class_name :: operator op (arg_list) {function_body//task defined } Operator function is member functions or friend functions.
Example Declarations Vector addition: vector operator + (vector); Friend Vector addition : friend vector operator + (vector, vector); Unary minus: vector operator – (); Friend Unary minus: friend vector operator – (vector); Subtraction: vector operator – (vector &a); Comparison: int operator == (vector); Friend Comparison: friend int operator == (vector, vector);
//overloading unary operators #include class space {int x; int y; int z; public :void getdata(int a, int b, int c) { x=a; y=b; z=c; }; void display(void) { cout << “\n” << x << “ “ << y << “ “ << z << “\n”; } void operator – ()//operator overloading { x=-x; y=-y; z=-z; } }; void main() {space S; S.getdata(10, -20, 30); cout<<“S : “;S.display(); -S;//activate operator – () cout<<“S : “;S.display(); }
//overloading binary operators #include class complex {float x; float y; public :complex() {}; void complex(float real, float imaginer) { x=real; y=imaginer; }; void display(void) { cout << x << “ + “ << y <<“ i \n”; }; complex operator + (complex c)//operator overloading { complex temp; temp.x = x + c.x; temp.y = y + c.y; return (temp); }; void main() {complex c1(2.5, 6.1), c2(3.3, 4.5), c3; c3 = c1 + c2;//invokes operator + () cout <<“\nc1 = “; c1.display();cout <<“\nc2 = “; c2.display(); cout <<“\nc3 = “; c3.display(); }
Overloading function Method overloading digunakan untuk membuat beberapa fungsi (method) dengan nama yang SAMA dan mengerjakan tugas yang MIRIP. Tujuannya, agar programmer tidak kesulitan dalam mengingat sebuah fungsi yang tugasnya mirip. Misalnya untuk membuat fungsi perkalian. Ada perkalian yang membutuhkan dua argumen dan ada perkalian yang membutuhkan tiga argumen (tugasnya mirip, yaitu sama-sama mengalikan argumen, hanya jumlah argumen yang berbeda).
Overloading function Kalau dibuat fungsi dengan nama yang berbeda, kemungkinan programmer akan repot. Contoh, untuk fungsi perkalian dengan dua argumen, namanya adalah kali1(bil1, bil2). Sedangkan untuk perkalian dengan tiga argumen namanya adalah kali2(bil1, bil2, bil3). Repot kan? Gimana kalo ada sepuluh perkalian? Bandingkan bila namanya kali(bil1, bil2) dan kali(bil1, bil2, bil3). Kita cuma perlu mengingat jumlah argumen dari fungsi kali.
Overloading function So, gimana cara compiler C++ membedakan method tersebut, padahal namanya sama? Compiler C++ memilih fungsi dengan mengamati jumlah, tipe data dan urutan argumen. Dari sini jelas bahwa compiler menggunakan daftar parameter untuk membedakan fungsi dengan nama yang sama. Bukan membedakan dengan return type-nya (nilai balik).
Overloading function untuk membuat method overloading diperlukan setidaknya satu dari tiga syarat di bawah ini: mempunyai jumlah argumen berbeda. mempunyai tipe data argumen yang berbeda. mempunyai urutan argumen yang berbeda.