Operator overloading
Konsep overloading terhadap operator didasarkan pada operasi yang terjadi sehari-hari misalkan operator + biasa digunakan untuk menjumlahkan bilangan bulat ataupun bilangan pecahan. 4 + 5 3.56 + 3.08 Bagaimana jika operator + digunakan untuk penjumlahan bilangan kompleks?
Untuk menjumlahkan bilangan kompleks, perlu sedikit modifikasi dalam penggunaan operator + Penambahan bilangan kompleks melibatkan penambahan sisi real dan imajiner (3 - 5i) + (6 + 7i) = (3 + 6) + (-5 + 7)i = 9 + 2i
Operator overloading artinya melakukan modifikasi / overloading pada operator (+, -, *, dsb) sesuai kebutuhan Syntax operator overloading: Tipe operator simbol_operator ( argument )
Operator yang dapat di-overloading + - * / % ^ & | ~ ! = > < += -= *= /= %= ^= &= |= >= <= && || == != <<= >>= << >> ++ -- ->* , -> [] () new New[] delete Delete[]
Operator yang tidak dapat di-overloading Kegunaan Contoh . Operator anggota struct atau class Cin.getline() .* Operator pointer ke anggota Object.*anggota : : Operator lingkup Class::anggota ? : Ungkapan kondisi C=(a>b)?a:b
Overloading operator biner Operator biner merupakan operator dengan dua operand, contoh operator+. Bentuk umum overloading operator biner adalah: TipeData operator simbol_operator (object )
#include <iostream> using namespace std; class complex { float riil; float imajiner; public: complex() { riil=0; imajiner=0; }; complex(float real, float imaginer) riil=real; imajiner=imaginer; void display(void) cout<<"["<<riil<<"]+["<<imajiner<<"i]\n"; complex operator +(complex c) { complex temp; temp.riil = riil+c.riil; temp.imajiner=imajiner+c.imajiner; return(temp); }; main() complex c1(2.5, 6.1); complex c2(3.3, 4.5); complex c3; c3=c1+c2; cout<<"\nC1="; c1.display(); cout<<"\nC2="; c2.display(); cout<<"\nC3="; c3.display(); system("pause"); }
Lengkapi program di atas untuk operasi berikut Addition (a + bi) + (c + di) = (a + c) + (b + d)i. Substraction (a + bi) - (c + di) = (a - c) + (b - d)i. Multiplication (a + bi) * (c + di) = (ac - bd) + (ad + bc)i. c* (a + bi) = c*a + c*bi Addition dengan bilangan integer (a + bi) + x= (a+x) + bi
Lengkapi program di atas untuk operasi berikut Increment (a + bi)++ = (a ++) + (b++)i Operator << (operator keluaran setelah cout) tampil : Riil = a, Imajiner=b; Operator >> (operator masukan setelah cin) tampil : Masukkan bilangan riil : Masukkan bilangan imajiner :
Overloading operator increment dan decrement Operator increment ada dua macam yaitu: Pre increment, dengan format: Nama_kelas operator++(); Post increment dengan format: Nama_kelas operator++(int); Operator decrement juga ada dua yaitu: Predecrement, dengan format: Nama_kelas operator--(); Post decrement, dengan format: Nama_kelas operator--(int);
Contoh Program // Program c++ dengan operator decrement &increment #include <constream.h> class Date { private: int month, day, year; static const int days[ ] = {0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 }; void helpIncrement(); public: Date(int m=1, int d=1, int y=1990); void setDate(int m, int d, int y); Date operator++(); Date operator++( int ); const Date operator+= ( int ); int leapYear( int ); int endOfMonth( int ); };
// pre increment Date Date::operator++() { helpIncrement(); return (*this) } // post increment Date Date::operator++(int){ Date temp = *this void Date::helpIncrement(){ if (endOfMonth( day ) && month == 12) { day = 1; month = 1; ++year;
else if ( endOfMonth(day) ) { } else ++day; int Date::endOfMonth( int d) { if ( month ==2 && leapYear( year ) ) return (d == 29); return (d == days[ moth ]); int Date::leapYear( int yr){ if ( (yr%40 == 0) || (yr%100 != 0 && yr%4 == 0) ) return 1;
return 0; } const Date operator+= ( int addays) { for (int I=0; I < addays; I++) helpIncrement(); return *this;
Operator overloading dengan friend Operator overloading yang sering menggunakan friend adalah << pada cout dan >> pada cin Dengan overloading ini dimungkinkan menuliskan statement: cin >> object; cout << object;
Operator overloading dengan friend Bentuk umum dari overloading terhadap operator << adalah: ostream& operator << (ostream& output, object) { // tubuh fungsi return (output); } Bentuk umum dari overloading terhadap operator >> adalah: istream& operator >> (istream& input, object &) { return (input);
Contoh Program // program C++ operator >> dan << dengan friend #include <constream.h> #include <string.h> class Buku { private: int Nomor; char Judul[30]; char Pengarang[10]; public: Buku(); friend ostream& operator << (ostream& o, Buku b1); friend istream& operator >> (istream& i, Buku &b1); };
// definisi fungsi Buku::Buku() { Nomor = 0; strcpy(Judul, ""); strcpy (Pengarang, ""); } //definisi fungsi friend ostream& operator<<(ostream& out, Buku b1){ out << "Nomor buku: " << b1.Nomor << endl; out << "Judul buku: " << b1.Judul << endl; out << "Pengarang: " << b1.Pengarang << endl; return (out); istream& operator>> (istream& in, Buku& b1){ cout << "inputkan Nomor buku "; in >> b1.Nomor; cout << "inputkan Judul buku ";
in >> b1.Judul; cout << "inputkan Pengarang "; in >> b1.Pengarang; return (in); } void main() { Buku buku_C; cin >> buku_C; cout << buku_C;