operator overloading

20
Operator overloading

Upload: lucky

Post on 24-Feb-2016

76 views

Category:

Documents


0 download

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 Presentation

TRANSCRIPT

Page 1: Operator overloading

Operator overloading

Page 2: 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?

Page 3: Operator overloading

• 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

Page 4: Operator overloading

• Operator overloading artinya melakukan modifikasi / overloading pada operator (+, -, *, dsb) sesuai kebutuhan

Syntax operator overloading:

Tipe operator simbol_operator ( argument )

Page 5: Operator overloading

5

Operator yang dapat di-overloading

+ - * / % ^ &

| ~ ! = > < +=

-= *= /= %= ^= &= |=

>= <= && || == != <<=

>>= << >> ++ -- ->* ,

-> [] () new New[] delete Delete[]

Page 6: Operator overloading

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

Page 7: Operator 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 )

Page 8: Operator overloading

#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");}

Page 9: Operator overloading

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

Page 10: Operator overloading

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 :

Page 11: Operator overloading

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

Page 12: Operator overloading

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 );

};

Page 13: Operator overloading

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;

}

Page 14: Operator overloading

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

Page 15: Operator overloading

15

return 0;}

const Date operator+= ( int addays) {for (int I=0; I < addays; I++)helpIncrement();return *this;

}

Page 16: Operator overloading

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

Page 17: Operator overloading

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

Page 18: Operator overloading

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);};

Page 19: Operator overloading

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 ";

Page 20: Operator overloading

20

in >> b1.Judul;cout << "inputkan Pengarang ";in >> b1.Pengarang;return (in);

}

void main() {Buku buku_C;cin >> buku_C;cout << buku_C;

}