SIDE

Jumat, 25 September 2009

Tugas 3 Tentang Destructor

Destructor
Meskipun bagian ini mengacu pada destructors pos, itu juga tentang alokasi memori dinamis. Mengalokasikan memori di toko bebas untuk anggota kelas hanya dapat dikelola dengan bantuan sebuah destructor, selain sebuah konstruktor tentu saja, dan, seper
ti yang Anda akan melihat, menggunakan anggota

kelas dialokasikan secara dinamis akan meminta Anda untuk menulis salinan Anda sendiri konstruktor .

Apa itu Destructor?
Sebuah destructor adalah suatu fungsi yang menghancurkan sebuah objek ketika tidak lagi diperlukan atau jika pergi ke luar lingkup. Ini disebut secara otomatis ketika objek keluar dari ruang lingkup. Menghancurkan sebuah objek melibatkan membebaskan memori yang ditempati oleh anggota data dari objek (kecuali anggota statis, yang tetap ada bahkan ketika tidak ada kelas benda-benda yang ada). The destructor untuk kelas adalah anggota fungsi dengan nama yang sama dengan kelas, didahului oleh tilde ~. Destructor kelas tidak mengembalikan nilai dan tidak memiliki parameter yang didefinisikan. Untuk kelas Box, prototipe dari kelas destructor adalah:

Default Destructor
Semua objek yang telah kita gunakan hingga kini telah hancur secara otomatis oleh destructor default untuk kelas. Ini dihasilkan oleh kompilator pada tidak adanya destructor eksplisit yang diberikan dengan kelas. Default destructor tidak menghapus anggota benda-benda atau objek yang telah dialokasikan dalam toko bebas oleh operator baru. Anda harus secara eksplisit menggunakan menghapus operator untuk menghancurkan benda-benda yang telah dibuat menggunakan operator baru, sama seperti yang Anda lakukan dengan variabel biasa. Jika Anda memutuskan untuk mengalokasikan memori untuk anggota suatu objek secara dinamis, Anda harus menggunakan operator menghapus untuk melaksanakan destructor kelas yang membebaskan setiap ingatan yang dialokasikan oleh operator baru.
atau

Destructor

Constructor dipanggil à Ada space di memori yang terpakai à Bebaskan memori setelah selesai àDestructor

Fungsi & sifat destructor

Fungsi : membebaskan memori yang digunakan variabel dinamis.


Sifat : otomatis dijalankan pada saat objek dilenyapkan.

: tdk terdapat argumen (parameter)/void.

: nama destructor = ~nama class


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 listing di bawah :


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" ;

}


Listing di atas akan menghasilkan output sebagai berikut :

Konstruktor dipanggil

Disini main program

Destruktor dipanggil

Dari contoh di atas dilihat bahwa konstruktor dipanggil ketika objek x dibuat. Sedangkan destruktor secara otomatis dipanggil oleh compiler ketika objek x meninggalkan blok main(). Hal ini sesuai dengan kaidah kelokalan objek di C++.


Contoh source code:


#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 (6,4), rectb (7,6);

cout << "rect area: "<<>

cout << "rectb area: "<<rectb.area() <<>

return 0;

}



Output :


0 komentar:

Posting Komentar

 
© 2011 PENGETAHUAN BUKAN BATASAN IMAJINASI | Except as noted, this content is licensed under Creative Commons Attribution 2.5.
For details and restrictions, see the Content License | Recode by Ardhiansyam | Based on Android Developers Blog