Konstruktor dan Destruktor Pada Pemrograman C++ (Classes)

posted in: Pemrograman C++ | 2

Pengertian Konstruktor dan Destruktor

Konstruktor merupakan fungsi khusus yang secara otomatis akan dipanggil ketika sebuah objek dari sebuah kelas dipanggil pada fungsi utama atau main(). Ciri-ciri atau karakteristik dari konstruktor adalah memiliki nama yang sama dengan mana kelas dan tidak memiliki tipe data serta pengembalian. Misalkan kamu membuat kelas bangun seperti yang sudah Mimin contohkan pada tutorial pertama mengenai kelas, maka konstruktor dari kelas tersebut adalah suatu fungsi dengan nama bangun. Fungsi ini (konstruktor) tidak dapat dipanggil dengan menggunakan cara biasa layaknya memanggil member dalam sebuah kelas sebagai contoh namaobjek.fungsi();.

Konstruktor sangat penting keberadaanya karena kadangkala suatu objek perlu melakukan beberapa tugas tertentu sebelum suatu objek melakukan operasi selanjutnya, misalkan memesan lokasi memori dan memberikan nilai tertentu pada suatu variabel.

Berbeda halnya dengan konstruktor, desktruktor memiliki implementasi yang sama dengan konstruktor namun berbeda pada proses pemanggilannya. Fungsi destruktor akan otomatis dipanggil ketika suatu objek kelas dihapus. Destruktor berguna dalam merapikan kembali objek-objek yang sudah tidak diperlukan dan melakukan pembersihan memori guna menghindari konflik pada program yang besar dan kompleks.

Aplikasi Penggunaan Konstruktor dan Destruktor

Agar lebih jelas penggunaanya, langsung saja kita menuju ke aplikasinya. Mimin menggunakan source code pada tutorial pertama mengenai kelas sebagai berikut:


#include <iostream>;
using namespace std;

class bangun{
private:
float x,y;
public:
float luas(){return x*y;};
void beri_Nilai(float panjang, float lebar);
};

//scope operator (::)
void bangun::beri_Nilai(float panjang, float lebar){
x = panjang;
y = lebar;
}

int main(){
bangun a,b;
a.beri_Nilai(4,3);
b.beri_Nilai(7,5);
cout<<"Luas persegi panjang adalah = "<<a.luas()<<endl;
cout<<"Luas persegi panjang adalah = "<<b.luas()<<endl;
return 0;
}

Adakah diantara kamu semua mengetahui bug pada program di atas? Ketika objek dibentuk pada baris 19, maka pada baris 20, objek memanggil member fungsi beri_Nilai dari kelas bangun guna memberikan nilai x dan y sebaga nilai panjang dan lebar bangun. Seandainya objek kelas bangun tidak mengakses member beri_Nilai dan langsung mengakses member luas, apakah yang akan terjadi? Tentusaja program akan mengalami error atau program menghasilkan output yang tidak semestinya, karena variabel x dan y belum berisi suatu nilai. Coba sekarang kamu comment kode pada baris 20 dan 21 dan cek apakah yang akan terjadi. Mimin mendapatkan hasil sebagai berikut:

error classes

Masalah di atas dapat diselesaikan dengan menggunakan konstruktor. Sekarang Mimin akan memodifikasi program di atas dengan menambahkan sebuah konstruktor.


#include <iostream>
using namespace std;

class bangun{
private:
float x,y;
public:
float luas(){return x*y;};
bangun(float panjang, float lebar);
};

//konstruktor
bangun::bangun(float panjang, float lebar){
x = panjang;
y = lebar;
}

int main(){
bangun a(4,7);
bangun b(5,6);
cout<<"Luas persegi panjang adalah = "<<a.luas()<<endl;
cout<<"Luas persegi panjang adalah = "<<b.luas()<<endl;
return 0;
}

Pada program di atas, Mimin mengimlementasikan fungsi beri_Nilai dengan menggunakan konstruktor berparameter yaitu panjang dan lebar yang nantinya akan diumpan ke variabel x dan y. Sekarang kamu bisa menggunakan konstruktor ini dengan memanggil objek dari kelas bangun disertai parameter terkait dengan konstruktor yang ada. Berikut adalah output programnya:

konstruktor class

Lalu bagaimana dengan destruktor Min? Destruktor dibuat dengan menambahkan karakter tilde (~) kemudian diikuti dengan nama kelas. Karena tidak adanya deklarasi pada saat kamu menghapus objek, maka destruktor tidak memiliki parameter. Berikut mimin contohkan sintaks sinkat penggunaan destruktor guna me-reset x dan y setelah objek berakhir masa kerjanya.


bangun::~bangun(){
x = 0;
y = 0;
}

Tambahkan program di atas dengan destruktor dan lihat hasilnya. Mimin contohkan dibawah ini:


#include <iostream>
using namespace std;

class bangun{
private:
float x,y;
public:
float luas(){return x*y;};
bangun(float panjang, float lebar);
~bangun();
};

//konstruktor
bangun::bangun(float panjang, float lebar){
x = panjang;
y = lebar;
}
bangun::~bangun(){
cout<<"Reset"<<endl;
x=0;
y=0;
}

int main(){
bangun a(4,7);
bangun b(5,6);
cout<<"Luas persegi panjang adalah = "<<a.luas()<<endl;
cout<<"Luas persegi panjang adalah = "<<b.luas()<<endl;
return 0;
}

Berikut hasil output programnya:

destruktor

Ternyata jelas terbukti bahwa ketika suatu objek telah melaksanakan tugasnya, maka secara otomatis destruktor dipanggil.

 

“Selagi masih ada ilmu yang bermanfaat dan kesempatan, sebarkanlah”

Salam sinauarduino.com

2 Responses

Leave a Reply