Tempat Bermain dengan Kata

  • Persatuan

    Dunia akan menjadi indah bila kita bisa bersatu, dunia akan menjadi damai dan tentram

    read-more
  • Kenangan

    Semua orang pasti punya kenangan entah itu yang baik dan ingin diingat ataupun kenangan buruk yang ingin dibuang jauh-jauh, yang pasti semua itu menjadi pelecut untuk masa depan kita

    read-more
  • Impian

    Orang yang tidak punya mimpi seperti robot, lebih kejamnya lebih baik mati dari pada hidup tidak berguna dan berbuat apa-apa

    read-more
  • Cinta

    Kata abstrak yang sampai sekarang aku belum bisa mendefinisikan, cinta yang bagaimana? Kepada siapa? masih belum terdefinisikan

    read-more
Previous Next

5.Construktor dan Destruktor

Posted by marfio87 On - - 3 komentar

A. Constructor dan Destructor
Objek biasanya memerlkan inisialisasi variable atau menentukan memori dinamik selama proses untuk mencapai hasil akhie yang diharapkan dan menghindari pengembalian nilai yang tidak diharapkan.
Untuk mengatasinya dapat digunakan fungsi spesial : constructor, yang dapat dideklarasikan dengan pemberian nama fungsi dengan nama yang sama untuk class. Fungsi dari constructor ini akan dipanggil secara otomatis ketika instance baru dari sebuah class dibuat. Contoh :

// classes example
#include
class CRectangle {
int width, height;
public:
CRectangle (int,int);
int area (void) {return (width*height);}
};
CRectangle::CRectangle (int a, int b) {
width = a;
height = b;
}
int main () {
CRectangle rect (3,4);
CRectangle rectb (5,6);
cout << "rect area: " << rect.area() << endl;
cout << "rectb area: " << rectb.area() << endl;
}

Output :
rect area: 12
rectb area: 30

Hasil dari contoh diatas sama seperti contoh sebelumnya. Dalam hal ini, hanya menggantikan fungsi set_values, yang sudah tidak ada dengan class constructor. Perhatikan cara parameter diberikan ke constructor pada saat instance class dibuat :
CRectangle rect (3,4);
CRectangle rectb (5,6);
Destructor berfungsi kebalikannya. Secara otomatis akan dipanggil jika objek di keluarkan dari memory, ataupun karena keberadaannya telah selesai (contoh : jika didefinisikan sebuah objek local dalam function dan function tersebut selesai) atau karena merupakan objek yang secara dinamis ditetapkan dan dikeluarkan dengan menggunakan operator delete.
Destuctor harus mempunyai nama yang sama dengan class, diberi awalan tile (~) dan tidak mengembalikan nilai. Contoh :
// example on constructors and destructors
#include
class CRectangle {
int *width, *height;
public:
CRectangle (int,int);
~CRectangle ();
int area (void) {return (*width * *height);}
};
CRectangle::CRectangle (int a, int b) {
width = new int;
height = new int;
*width = a;
*height = b;
}
CRectangle::~CRectangle () {
delete width;
delete height;
}
int main () {
CRectangle rect (3,4), rectb (5,6);
cout << "rect area: " << rect.area() << endl;
cout << "rectb area: " << rectb.area() << endl;
return 0;
}
Output :
rect area: 12
rectb area: 30

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"). Contoh :

class CExample {
public:
int a,b,c;
void multiply (int n, int m) { a=n; b=m; c=a*b; };
};
Jika tanpa constructor, Kompiler secara otomatis mengasumsikan anggota-anggota fungsi constructor berikut :
Empty constructor
Merupakan constructor tanpa parameters didefinisikan sebagai nop (blok instruksi kosong). Tidak melakukan apapun.
CExample::CExample () { };
Copy constructor
Merupakan constructor dengan satu parameter dengan tipe yang sama yang ditetapkan untuk setiap anggota variable class nonstatik objek yang disalin dari objek sebelumnya.
CExample::CExample (const CExample& rv) {
a=rv.a; b=rv.b; c=rv.c;
}
Penting untuk mengetahui, bahwa kedua constructor default : empty construction dan copy constructor ada jika tidak ada constructor lain yang dideklarasikan. Jika terdapat constructor dengan sejumlah parameter dideklarasikan, maka tidak satupun dari constructors default ini ada.
Contoh :
// overloading class constructors
#include
class CRectangle {
int width, height;
public:
CRectangle ();
CRectangle (int,int);
int area (void) {return (width*height);}
};
CRectangle::CRectangle () {
width = 5;
height = 5;
}
CRectangle::CRectangle (int a, int b) {
width = a;
height = b;
}
int main () {
CRectangle rect (3,4);
CRectangle rectb;
cout << "rect area: " << rect.area() << endl;
cout << "rectb area: " << rectb.area() << endl;
}
Output :
rect area: 12
rectb area: 25

Contoh diatas rectb dideklarasikan tanpa parameter, sehingga diinisialisasikan dengan constructor tanpa parameters, yang mendeklarasikan width dan height dengan nilai 5.
Perhatikan jika dideklarasikan objek baru dan tidak diberikan parameter maka tidak diperlukan tanda kurung ():
CRectangle rectb; // right
CRectangle rectb(); // wrong!

Categories:

3 Responses so far.

  1. Marbidin says:

    blognya di update dan dipermak gan, keep blogging :)

  2. imelda says:

    been here to say have a happy day

Leave a Reply