operator overloading
DESCRIPTION
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 - PowerPoint PPT PresentationTRANSCRIPT
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 + 53.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 )
5
Operator yang dapat di-overloading
+ - * / % ^ &
| ~ ! = > < +=
-= *= /= %= ^= &= |=
>= <= && || == != <<=
>>= << >> ++ -- ->* ,
-> [] () new New[] delete Delete[]
Operator
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
Operator yang tidak dapat di-overloading
7
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 :
11
• 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);
Overloading operator increment dan decrement
12
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 );
};
13
// pre incrementDate Date::operator++() {
helpIncrement();return (*this)
}
// post incrementDate Date::operator++(int){Date temp = *thishelpIncrement();return (*this)
}
void Date::helpIncrement(){if (endOfMonth( day ) && month == 12) {
day = 1;month = 1;++year;
}
14
else if ( endOfMonth(day) ) {day = 1;++month;
}else
++day;}
int Date::endOfMonth( int d) {if ( month ==2 && leapYear( year ) )
return (d == 29);else
return (d == days[ moth ]);}
int Date::leapYear( int yr){if ( (yr%40 == 0) || (yr%100 != 0 && yr%4 == 0) )
return 1;else
15
return 0;}
const Date operator+= ( int addays) {for (int I=0; I < addays; I++)helpIncrement();return *this;
}
16
• 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
17
• Bentuk umum dari overloading terhadap operator << adalah:ostream& operator << (ostream& output, object) {
// tubuh fungsireturn (output);
}
• Bentuk umum dari overloading terhadap operator >> adalah:istream& operator >> (istream& input, object &) {
// tubuh fungsireturn (input);
}
Operator overloading dengan friend
18
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);};
19
// definisi fungsiBuku::Buku() {
Nomor = 0;strcpy(Judul, "");strcpy (Pengarang, "");
}
//definisi fungsi friendostream& 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 ";
20
in >> b1.Judul;cout << "inputkan Pengarang ";in >> b1.Pengarang;return (in);
}
void main() {Buku buku_C;cin >> buku_C;cout << buku_C;
}