KONSTRUKTOR DAN DESTRUKTOR ~ SUMBER INFORMASI





Rabu, 23 September 2009

KONSTRUKTOR DAN DESTRUKTOR

Dalam pembuatan objek atau kelas terdapat metode selain procedure dan function adalah Konstruktor dan Destruktor. Konstruktor digunakan untuk menginisialisasi objek, dipanggil pada saat objek diciptakan. Sedangkan destruktor biasanya setelah objek tidak digunakan lagi. Pembuatan konstruktor dengan menggunakan key word “Constructor” sedangkan destruktor menggunakan “Destructor”.

A. KONSTRUKTOR.

• Pada dasarnya sebuah konstruktor melakukan tugas yang sama dengan fungsi assign() yang mana tugas fungsi assign() untuk memasukkan nilai kedalam member variabel pembilang dan penyebut, sehingga tidak perlu repot-repot memanggil fungsi assign() untuk setiap objek yang deklarasikan.
• Sebuah konstruktor harus mempunyai nama yang sama dengan kelas dimana konstruktor tersebut berada, dan dideklarasikan tanpa return value (nilai balik), juga tanpa kata kunci void.

Contoh kelas BilanganRasional sebagai berikut :

class BilanganRasional
{
public :
//KONSTRUKTOR BilanganRasional
BilanganRasional(int pemb, int peny)
{
pembilang = pemb;
penyebut = peny;
}
private :
int pembilang, penyebut;
};

Bandingkan struktur konstruktor dengan fungsi assign(). Konstruktor BilanganRasional melakukan tugas yang sama dengan member fungsi assign(). Bedanya hanya terletak pada pemanggilan fungsi dan konstruktor tersebut. Jika fungsi assign() harus kita panggil dengan didahului oleh pendeklarasian sebuah objek, kemudian fungsi dari objek tersebut dipanggil dengan operator titik disertai nilai yang ingin kita input, misal :
Fungsi assign() sebagai berukut :
BilanganRasional x;
x.assign(22,7);

maka konstruktor cukup dipanggil sebagai berikut:
BilanganRasional x(22,7);

Kedua varian tersebut melakukan hal yang sama, yakni menginitialisasikan nilai 22 ke member variabel pembilang, dan nilai 7 ke variabel penyebut.

- Konstruktor Dengan Initialization Lists

• Penulisan konstruktor dengan daftar initialisasi (initialization lists) merupakan fasilitas yang disediakan oleh C++ untuk menyederhanakan struktur konstruktor. Ini berarti, contoh konstruktor di atas dapat pula ditulis sebagai berikut :

class BilanganRasional
{
public :
BilanganRasional(int pemb, int peny) : pembilang(pemb),
penyebut(peny) { }
private :
int pembilang, penyebut;
};

• Contoh di atas menghasilkan fungsi yang sama dengan konstruktor yang kita bahas sebelumnya.

- Overloading Constructors

Sama halnya seperti fungsi, constructor juga dapat mempunyai nama yang sama tetapi mempunyai jumlah dan tipe yang berbeda pada parameternya. Pada saat pemanggilan kompiler akan meng-eksekusi yang sesuai pada saat objek class di deklarasikan.
Pada kenyataannya, ketika dideklarasikan sebuah class dan tidak disebutkan constructornya, maka kompiler secara otomatis akan mengasumsikan dua constructor overloaded ("default constructor" dan "copy constructor").

- Copy Constructor

Kita telah mempelajari bagaimana struktur sebuah konstruktor serta bagaimana membuat objek dari konstruktor yang telah didefinisikan.Tetapi, coba Bayangkan bila Anda telah mempunyai sebuah objek x, kemudian Anda menginginkan membuat sebuah objek y yang memiliki nilai member data dan member fungsi yang sama. Tentu saja Anda dapat mendeklarasikan objek baru dengan memanggil konstruktor yang sama sebanyak 2 kali :
Contoh:
BilanganRasional x(22,7);
BilanganRasional y(22,7);
Perintah di atas mendeklarasikan 2 objek, yakni x dan y yang masing-masing memiliki nilai 22 pada member variabel pembilang dan 7 pada member variabel penyebut. Akan tetapi, Anda dapat juga mempersingkat kode diatas dengan perintah berikut :
BilanganRasional x(22,7);
BilanganRasional y(x);

Source code contoh copy constructor

#include"iostream.h"
class BilanganRasional
{
private:int pembilang, penyebut;
public:
BilanganRasional(int pemb,int peny):pembilang(pemb),penyebut(peny)
{ cout<<"Bilangan Rasional Pembilang x = "; cin>>pembilang;
cout<<"Bilangan Rasional Penyebut x = "; cin>>penyebut;
cout<
}
//CopyConstructor terdapat disini
BilanganRasional(const BilanganRasional& br):pembilang(br.pembilang),penyebut(br.penyebut)
{
cout<<"CONSTRUKTOR COPY"<<
cout<<"Bilangan Rasional Pembilang y = "<<
cout<<"Bilangan Rasional Penyebut y = "<<
}
};
void main(int pembilang, int penyebut)
{
BilanganRasional x(pembilang,penyebut);
BilanganRasional y(x);
}

OUT PUT



Deklarasi CopyConstructor otomatis dipanggil ketika Anda mengkopi objek x ke objek y. Perhatikan bahwa x menjadi parameter ketik kita mendeklarasikan objek y.

B. DESTRUKTOR.

Jika kita mendeklarasikan konstruktor untuk membuat sebuah objek, maka kita juga harus mendeklarasikan sebuah destruktor untuk menghapus sebuah objek. Setiap kelas mempunyai tepat satu destruktor. Jika Anda tidak mendeklarasikan sebuah destruktor dalam sebuah kelas, maka destruktor otomatis akan diciptakan sendiri oleh compiler C++. Destruktor dapat kita definisikan sendiri dengan simbol ~. Disarankan untuk mendefinisikan sendiri destruktor walaupun secara otomatis compiler C++ akan mendeklarasikan sebuah destruktor pada saat program Anda dicompile, tetapi dengan mendefinisikan sendiri sebuah destruktor maka Anda mempunyai kontrol penuh terhadap apa yang dilakukan destruktor dari kelas Anda.

Perhatikan source code di bawah :

# include "iostream.h"
class BilanganRasional
{
public :
BilanganRasional() {cout <<"Konstruktor dipanggil\n";}
//Destruktor dari kelas BilanganRasional
~BilanganRasional() {cout <<"Destruktor dipanggil\n";}
private :
int pembilang, penyebut;
};
void main()
{
BilanganRasional x;
cout<<"Disini main program\n" ;
}

OUTPUT




share

0 komentar:

Posting Komentar

 
Design by Free WordPress Themes | Bloggerized by Lasantha - Premium Blogger Themes | Grocery Coupons