Disyorkan, 2024

Pilihan Editor

Perbezaan Antara Pembina dan Penghancur

Kadang-kadang diperlukan untuk memulakan beberapa bahagian objek sebelum ia dapat digunakan. Sebagai contoh, kami beroperasi pada timbunan, sebelum kami melakukan apa-apa tindakan, bahagian atas timbunan mesti ditetapkan kepada sifar. Ciri inisial automatik ini dilakukan melalui 'Pembina'. Kemungkinan, jika objek perlu melaksanakan beberapa kod sebelum dimusnahkan. Sebagai contoh, jika objek perlu menutup fail yang telah dibuka, sebelum kemusnahannya. Ia boleh dilakukan dengan bantuan 'Destructor'.

Mari kita melihat beberapa perbezaan asas antara pembina dan destructor dengan bantuan carta perbandingan

Carta perbandingan:

Asas untuk perbandinganPembinaDestructor
Tujuan
Ia memperuntukkan memori ke objek.Ia menguraikan memori sesuatu objek.
Perisytiharanclass_name (argumen jika ada) {};~ class_name (tiada hujah) {};
ArgumenPembina menerima hujahDestructor tidak menerima apa-apa hujah.
MemanggilPembina dipanggil secara automatik, manakala objek dicipta.Destructor dipanggil secara automatik, sebagai blok keluar atau program ditamatkan.
BekerjaPembina membolehkan objek memulakan beberapa nilai sebelum ini, ia digunakan.Destructor membenarkan objek untuk melaksanakan beberapa kod pada masa kemusnahannya.
Perintah pelaksanaan
Pembina dipanggil secara berturut-turut.
Destructor dipanggil dalam urutan terbalik pembina.
Dalam nomborTerdapat banyak pembina di dalam kelas.Tetapi sentiasa ada satu destruktor dalam kelas.
Salinan PembinaSalinan pembina membolehkan pembina untuk mengisytiharkan dan memulakan objek daripada objek lain.Tiada konsep sedemikian.
Lebih muatanConstructors boleh dibebankan.Destructor tidak boleh dibebankan.

Definisi Pembina:

Pembina pada dasarnya adalah fungsi ahli kelas, yang memulakan objek dan memperuntukkan ingatan kepadanya. Konstruktor boleh dikenal pasti dengan mudah kerana ia diisytiharkan dan ditakrifkan dengan nama yang sama seperti kelas. Pembina tidak mempunyai sebarang jenis pulangan; jadi, mereka tidak mengembalikan apa-apa, bahkan tidak 'tidak sah'. Pembina sentiasa ditakrifkan dalam seksyen awam kelas.

Terdapat banyak pembina di dalam kelas; mereka boleh dibezakan berdasarkan nombor dan jenis argumen yang diluluskan. Jika terdapat banyak pembina di dalam kelas; pembina tersirat (pembina tidak ada apa-apa) mesti ditakrifkan bersama dengan mereka; ia tidak berbuat apa-apa, tetapi memenuhi compiler.

Pembina juga boleh didefinisikan dengan hujah-hujah lalai. Sedangkan, mereka juga memulakan objek "secara dinamik". Constructors tidak boleh diwarisi, atau ia boleh menjadi maya tetapi, mereka boleh dibebankan. Mereka tidak boleh dirujuk ke alamat mereka.

Pelaksanaan pembina:

 kelas Const {int a, b; awam: Const () {// pembina tanpa parameter a = 0; b = 0; } Const (int c, int d) {// constructor with parameter a = c; c = d; }}; int main () {Const C1; C2 (10, 20); // pernyataan ini memanggil pembina} 

Apabila C1 dibuat pembina tanpa parameter yang akan dilaksanakan, kerana C1 tidak lulus sebarang parameter. Sedangkan, apabila C2 dibuat pembina dengan parameter yang dieksekusi, kerana ia melewati dua integer kepada pembina.

Definisi Destructor:

A Destructor juga merupakan fungsi ahli kelas, yang menghalang memori yang diperuntukkan kepada objek. Ia ditakrifkan dengan nama yang sama seperti kelas, didahului oleh simbol tilde (~). Pemusnahan sentiasa dipanggil dalam urutan terbalik para pembina.

Selalu ada pemusnah tunggal dalam kelas, kerana ia tidak menerima apa-apa hujah. Objek tempatan dimusnahkan sebaik sahaja kawalan pelaksanaan meninggalkan blok; Sebaliknya, objek global dimusnahkan apabila keseluruhan program tamat. A destructor secara implisit dipanggil oleh pengkompil. Sekiranya kelas diwarisi, dan kelas diperolehi dari kelas induk dan kedua-dua kelas kanak-kanak dan kelas induk mempunyai pemusnah; maka, pemusnah kelas yang diperoleh dipanggil dahulu, diikuti oleh pemusnah kelas induk.

Pelaksanaan Destructor:

 kelas Const {int a, b; awam: Const (int c, int d) {// constructor with parameter. a = c; c = d; cout << "nilai a dan b adalah" < 

Apabila objek C1 dibuat, pembina dengan dua parameter jenis integer dipanggil dan ahli "a, b" mendapat initialized nad nilai "a, b" dicetak. Setelah itu destructor akan menggunakan dan mencetak mesej "object C1 get destroyed".

Perbezaan Utama Antara Penghalang dan Penghancur

  1. Tujuan utama pembina adalah untuk memperuntukkan ingatan kepada objek apabila mereka dicipta sedangkan tujuan utama pemusnah adalah untuk menguraikan memori objek apabila ia dimusnahkan.
  2. Pembina dibenarkan untuk menerima hujah-hujah tersebut sebagai hujah-hujah yang boleh digunakan untuk menginisialisasi ahli-ahli data kelas. A destructor tidak menerima apa-apa hujah sebagai satu-satunya kerja adalah untuk menguraikan memori objek.
  3. Pembina dipanggil apabila objek dibuat. Sebaliknya, destructor dipanggil apabila program ditamatkan atau program keluar dari blok di mana objek dibuat.
  4. Pembina lazimnya digunakan untuk menginisialkan data ahli kelas sedangkan, destructor digunakan untuk membiarkan objek melakukan beberapa tindakan sebelum ia dimusnahkan.
  5. Pembina dilaksanakan dalam urutan berturut-turut yang bermaksud jika terdapat kelas yang diturunkan yang mewarisi kelas asas dan objek kelas yang diterbitkan dicipta maka ia akan memanggil pembina kelas asas terlebih dahulu dan kemudian pembina kelas yang diturunkan. Sebaliknya, pemusnahan kelas yang diperoleh dipanggil dahulu dan kemudian kelas asas itu bermakna bahawa destructor dijalankan dalam perintah terbalik pembina.
  6. Di dalam kelas, terdapat banyak pembina yang dikenalpasti oleh hujah-hujah nombor yang diluluskan. Di kelas, terdapat hanya satu pemusnah.
  7. Terdapat satu konsep penyusun salinan yang membolehkan sesuatu objek dimulakan dari objek lain sedangkan pemusnahnya tidak mempunyai konsep sedemikian.
  8. Pembina boleh berlebihan untuk melaksanakan tindakan yang berlainan di bawah nama pembina yang sama manakala pemusnah tidak boleh dilebihkan.

Kesimpulan:

Selain kesamaan, pembina dan destruktor adalah fungsi ahli khas kelas, dan memiliki nama yang sama, perbezaan asas antara kedua-duanya ialah, 'pembina' dipanggil pada masa peruntukan memori dan 'destructor' dipanggil di masa objek deallocation memori. Kedua, pembina dan destruktor secara tersirat dipanggil oleh pengkompil walaupun mereka tidak ditakrifkan dalam kelas.

Top