C++ - Overloading terhadap Operator - nblognlife

C++ - Overloading terhadap Operator

C++ - Contoh Program Overloading terhadap Operator

       Sebelum memulai membaca posting saya berikut ini sebaiknya membaca postingan saya sebelumnya tentang Mengenal OOP pada C++ dan Konstruktor dan Destruktor pada OOP C++ agar tidak mengalami kesulitan untuk memahami apa yang akan saya sampaikan.

       Overloading terhadap operator pada umumnya digunakan untuk operasi pada data khususnya yang melibatkan objek. Secara default operasi “5+4” dapat dikerjakan oleh C++, tapi tidak dengan operasi yang melibatkan dua buah objek dari suatu class seperti “objek1 + objek2” (secara default operasi tersebut tidak dapat dilakukan oleh C++). Namun dengan menggunakan overloading terhadap operator operasi seperti “objek1 + objek2” menjadi dapat dilakukan oleh C++.

       Overloading dapat dilakukan pada operator-operator seperti operator aritmatika (“+”, “-“, “*”, “/”, “%”),  operator unary(“++”, “—”), dsb.

Bentuk penulisannya : <tipe> operator <simbol_operator> (<nama kelas> <objek>)

       Sebagai contoh pada program ini akan dilakukan overloading terhadap operator “+“ untuk menjumlahkan data pada dua objek dan melakukan penjumlahan data pada objek dengan suatu nilai. Berikut adalah syntax program yang berisi tentang contoh penggunaan overloading terhadap operator “+”.

/*
       C++ - Overloading terhadap Operator
       Microsoft Visual Studio Express 2012
*/

#include <iostream>
#include <iomanip> //setw()
using namespace std;

class Buku
{
private:
       int novel;
       int komik;

public:
       Buku (int j_novel = 0, int j_komik = 0); //Konstruktor
       void info_buku();
       Buku operator + (Buku b2); //overloading terhadap operator +
       Buku operator + (int x); //overloading terhadap operator +
};


int main()
{
       //menciptakan objek sekaligus inisialisasi melalui kontruktor
       Buku buku1(6, 12);
       Buku buku2(8, 6);
       Buku buku3;
       Buku buku4;

       //buku3 merupakan hasil penjumlahan buku1 dan buku2
       buku3 = buku1 + buku2;

       //buku4 merupakan hasil penjumlahan buku1 + 10
       buku4 = buku1 + 10;

       cout<<"PENJUMLAHAN DUA BUAH OBJEK"<<endl;
       cout<<"--------------------------"<<endl;
       cout<<"Objek buku1 : ";
       //memanggil fungsi info_buku() yang terdapat pada class Buku melalui objek buku1
       buku1.info_buku();
       cout<<endl;

       cout<<"Objek buku2 : ";
       //memanggil fungsi info_buku() yang terdapat pada class Buku melalui objek buku2
       buku2.info_buku(); 
       cout<<"\t\t___________________________ + "<<endl;
       cout<<endl;
      
       //buku3 = buku1.add(buku2);

       cout<<"Jumlah buku : ";
       //memanggil fungsi info_buku() yang terdapat pada class Buku melalui objek buku3
       buku3.info_buku(); 

       cout<<endl;
       cout<<endl;

       cout<<"PENJUMLAHAN OBJEK buku1 DENGAN NILAI X (10)"<<endl;
       cout<<"-------------------------------------------"<<endl;
       cout<<"Objek buku4 : ";
       //memanggil fungsi info_buku() yang terdapat pada class Buku melalui objek buku4
       buku4.info_buku();
       cout<<endl;
      
       system ("pause");
       return 0;
}

//Konstruktor
Buku::Buku(int j_novel, int j_komik)
{
       novel = j_novel;
       komik = j_komik;
}


//fungsi anggota class Buku yang digunakan untuk menampilkan nilai dari novel dan komik
void Buku::info_buku()
{
       cout<<"\tNovel = "<<setw(2)<<novel<<"\tKomik = "<<setw(2)<<komik<<endl;
}

Buku Buku::operator + (Buku b2)
{
       Buku tmp; // menciptakan objek sementara untuk menyimpan nilai
      
       tmp.novel = novel + b2.novel;
       tmp.komik = komik + b2.komik;

       return tmp;
}

Buku Buku::operator + (int x)
{
       Buku tmp;

       tmp.novel = novel + x;
       tmp.komik = komik + x;

       return tmp;
}


Penjelasan
1.    Menciptakan objek dan melakukan inisialisasi
Buku buku1(6, 12);
Buku buku2(8, 6);
Buku buku3;
Buku buku4;

Syntax di atas dilakukan untuk menciptakan objek dari class Buku, dan sekaligus melakukan inisialisasi pada anggota class Buku (novel dan komik) melalui konstruktor. 

INGAT :
Kontruktor adalah fungsi anggota dari suatu kelas yang secara otomatis dijalankan ketika suatu objek diciptakan.

       Jadi misalkan objek buku1 diciptakan maka kontruktor dari class Buku akan dijalankan. Pada program ini kontruktor didefinisikan untuk melakukan inisialisasi/pemberian nilai awal pada variabel private yang ada pada class Buku yaitu novel dan komik.

Berikut adalah kontruktor dari class Buku:
Buku::Buku(int j_novel, int j_komik)
{
      novel = j_novel;
      komik = j_komik;
}

       Pada potongan potongan program di atas, variabel novel dan komik pada class Buku diberikan nilai sesuai dengan nilai yang diberikan melalui parameter aktual yang digunakan saat menciptakan objek, misalkan Buku buku1(6, 12); maka nilai pada j_novel = 6,  j_komik = 12. Selanjutnya nilai tersebut diberikan kepada variabel novel dan komik melalui operator “=” (penugasan) sehingga pada objek buku1 nilai novel = 6 dan nilai komik = 12 seperti yang ditampikan di layar.

Catatan : Setiap objek yang diciptakan memiliki lokasi penyimpanan sendiri, sehingga nilai dari data yang ada pada objek satu dengan lainya tidak sama. Dengan kata lain antara nilai dari data pada suatu objek tidak tergantung dari objek lainnya.

2.   Penjumlahan dua buah objek
buku3 = buku1 + buku2;

       Penjumlahan dua buah objek di atas diperbolehkan karena menggunakan overloading pada operator. Saat syntax program tersebut dijalankan maka fungsi berikut akan dipanggil.

   Buku Buku::operator + (Buku b2)
   {
      Buku tmp;

      tmp.novel = novel + b2.novel;
      tmp.komik = komik + b2.komik;

      return tmp;
   }

Keterangan
-    Buku tmp;
tmp merupakan objek yang diciptakan untuk menyimpan hasil penjumlahan dari variabel novel dan komik yang berada pada objek buku1 dan buku2. Selanjutnya hasil penjumlahan tersebut dikembalikan melalui pernyataan  return tmp; dan disimpan ke objek buku3.

-    tmp.novel = novel + b2.novel;
novel mengacu pada variabel novel yang dimiliki oleh objek yang berada di depan operator “+” yang dapat dinyatakan sebagai objek pemanggil fungsi (pada pernyataan buku3 = buku1 + buku2;) dalam hal ini buku1, jadi yang dimaksud novel disini adalah variabel novel yang terdapat pada objek buku1. Sedangkan, b2.novel mengacu pada variabel novel yang dimiliki oleh objek yang berada dibelakang operator “+” yang dapat dinyatakan sebagai argumen/parameter aktual untuk memanggil fungsi, dalam hal ini b2.novel adalah variabel novel yang berada pada objek buku2.
Jadi syntax di atas dapat diartikan bahwa variabel tmp.novel menyimpan nilai penjumlahan buku1.novel dengan buku2.novel.

-    tmp.komik = komik + b2.komik;
“Penjelasan untuk variabel komik sama dengan penjelasan variabel novel.”

3.   Penjumlahan objek dengan suatu nilai
buku4 = buku1 + 10;

       Penjumlahan objek dengan suatu nilai di atas diperbolehkan karena menggunakan overloading pada operator. Saat syntax program tersebut dijalankan maka fungsi berikut akan dipanggil.
   Buku Buku::operator + (int x)
   {
      Buku tmp;

      tmp.novel = novel + x;
      tmp.komik = komik + x;

      return tmp;
    }

       Hampir sama dengan penjelasan pada point ke-2, novel mengacu pada variabel novel yang dimiliki oleh objek yang berada di depan operator “+” yang dapat dinyatakan sebagai objek pemanggil fungsi (pada pernyataan buku4 = buku1 + 10;) dalam hal ini buku1, jadi yang dimaksud novel disini adalah variabel novel yang terdapat pada objek buku1. Sedangkan, x mengacu pada nilai yang berada dibelakang operator “+” yang dapat dinyatakan sebagai argumen/parameter aktual untuk memanggil fungsi. Jadi syntax di atas dapat diartikan bahwa variabel tmp.novel menyimpan nilai penjumlahan buku1.novel dengan 10. Selanjutnya hasil penjumlahan tersebut dikembalikan melalui pernyataan  return tmp; dan disimpan ke objek buku4.

“Penjelasan untuk variabel komik sama dengan penjelasan variabel novel.”

4.   Menampilkan ke layar
buku1.info_buku();
buku2.info_buku();
buku3.info_buku();
buku4.info_buku();

Sebagai contoh  buku1.info_buku(); syntax tersebut digunakan untuk memanggil fungsi info_buku() yang terdapat pada class Buku melalui objek buku1. Fungsi info_buku() digunakan untuk menampilkan hasil ke layar. Berikut adalah fungsi info_buku():

    void Buku::info_buku()
    {
    cout<<”\tNovel = “<<setw(2)<<novel<<”\tKomik = “<<setw(2)<<komik<<endl;
    }

novel dan komik disini mengacu pada variabel novel dan komik yang berada pada objek yang digunakan untuk memanggil fungsi info_buku() , dalam hal ini objek buku1. Jadi nilai yang akan ditampilkan adalah nilai dari variabel novel dan komik yang terdapat pada objek buku1, sehingga pada layar akan menghasilkan  nilai 6 untuk novel dan 12 untuk komik.

“Pemanggilan dengan objek yang berbeda akan menghasilkan nilai yang berbeda sebuai dengan nilai yang disimpan oleh masing-masing objek.”

Output
PENJUMLAHAN DUA BUAH OBJEK
--------------------------
Objek buku1 :   Novel =  6      Komik = 12

Objek buku2 :   Novel =  8      Komik =  6
                ___________________________ +

Jumlah buku :   Novel = 14      Komik = 18


PENJUMLAHAN OBJEK buku1 DENGAN NILAI X (10)
-------------------------------------------
Objek buku4 :   Novel = 16      Komik = 22

Press any key to continue . . .


[RS]

Klik Like & Share jika postingan ini bermanfaat
Apa tanggapan Anda?

Berikan tanggapan Anda melalui kolom komentar yang telah disediakan.
- Gunakan bahasa yang sopan;
- Saat menjadikan postingan pada blog ini sebagai referensi, jangan lupa mencantumkan sumbernya (link dari blog ini).

Jika blog ini bermanfaat jangan lupa memberikan 'like' atau 'share' untuk mendapatkan update terbaru.

Terima kasih