C++ - Overloading terhadap Operator
By
Rachmat Santoso
—
Sabtu, 12 November 2016
—
Cplusplus
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 . . .
--------------------------
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