Razlika između konstruktora i destruktora

Autor: Laura McKinney
Datum Stvaranja: 1 Travanj 2021
Datum Ažuriranja: 12 Svibanj 2024
Anonim
C++ Tutorial 20: Razlika između objekta i varijable ?
Video: C++ Tutorial 20: Razlika između objekta i varijable ?

Sadržaj


Konstruktor i destruktor su funkcije člana s istim nazivom kao i njihova klasa. Bivši tip konstruktor pomaže u inicijalizaciji objekta. Suprotno tome, a peć za sagorijevanje otpadaka razlikuje se od konstruktora koji briše stvoreni konstruktor kada nema nikakve koristi.

Ponekad je potrebno inicijalizirati dio predmeta prije nego što se on može koristiti. Na primjer, radimo na snopu, prije nego što izvršimo bilo koju radnju, vrh snopa uvijek mora biti postavljen na nulu. Ova značajka automatske inicijalizacije provodi se putem 'Konstruktora'. Na primjer, ako objekt treba izvršiti neki kod prije nego što je uništen. Na primjer, ako objekt treba zatvoriti datoteku koju je otvorio prije uništenja. Može se izvesti uz pomoć 'Destruktora'.

Pogledajmo neke temeljne razlike između konstruktora i destruktora uz pomoć usporednog grafikona

  1. Usporedni grafikon
  2. definicija
  3. Ključne razlike
  4. Zaključak

Usporedni grafikon:

Osnove za usporedbuKonstruktorpeć za sagorijevanje otpadaka
Svrha

Raspoređuje memoriju predmetu.Sadrži memoriju objekta.
Deklaracija class_name (argumenti ako postoje) {};~ class_name (bez argumenata) {};
argumenti Konstruktor prihvaća argument Destruktor ne prihvaća nijedan argument.
zvanjeDok se objekt kreira, konstruktor se poziva automatski.Destruktor se poziva automatski, nakon izlaska bloka ili prekida programa.
RadnaKonstruktor omogućuje objektu da inicijalizira neku svoju vrijednost prije nego što ga koristi.Destruktor omogućava objektu izvršavanje nekog koda u trenutku njegovog uništenja.
Redoslijed izvršenja

Konstruktori se pozivaju uzastopnim redoslijedom.
Destruktor se naziva obratnim redoslijedom konstruktora.
U brojevima U razredu može biti više konstruktora.U razredu uvijek postoji jedan destruktor.
Konstruktor kopiranja Konstruktor kopiranja omogućava konstruktoru da deklarira i inicijalizira objekt iz drugog objekta.Nema takvog koncepta.
Prekom opterećenja Konstruktori se mogu preopteretiti.Destruktor se ne može preopteretiti.


Definicija konstruktora:

konstruktor u osnovi je članska funkcija klase, koja inicijalizira objekt i dodjeljuje mu memoriju. Konstruktori se mogu lako prepoznati jer su deklarirani i definirani istim nazivom kao i klasa. Konstruktor nema povratni tip; tako da ne vraćaju ništa, čak ni „nevažeće“. Konstruktor je uvijek definiran u javnom odjeljku klase.

U razredu može biti više konstruktora; mogu se razlikovati na temelju broja i vrste argumenata koji se daju. Ako u razredu postoji više konstruktora; implicitni konstruktor (konstruktor koji ne radi ništa) mora se definirati zajedno s njima; ne radi ništa, ali zadovoljava prevoditelja.

Konstruktori se mogu definirati i zadanim argumentima. Uz to, oni također objekt "dinamički" inicijaliziraju. Konstruktori se ne mogu naslijediti niti mogu biti virtualni, ali mogu biti preopterećeni. Ne mogu ih preusmjeriti na njihovu adresu.

Vrste konstruktora

U osnovi postoje tri vrste konstruktora - tvornički zadani, parametrizirani i kopiraj.


  • Zadani konstruktor: To je konstruktor gdje konstruktor ne daje nikakve argumente. Zadani konstruktor nema parametar, ali vrijednosti zadanog konstruktora mogu se zadati (dinamički).
  • Parameterizirani konstruktor: Ova vrsta konstruktora uzima argumente; možemo prenijeti različite vrijednosti članovima podataka kao argumentima.
  • Konstruktor kopiranja: Konstruktor kopiranja razlikuje se od ostalih vrsta konstruktora jer prihvaća adresu drugog objekta kao argument.

Implementacija konstruktora:

klasa Const {int a, b; javno: Const () // konstruktor bez parametra {a = 0; b = 0; } Const (int c, int d) {// konstruktor s parametrom a = c; c = d; }}; int main () {Const C1; C2 (10,20); // ova se izjava poziva na konstruktora}

Kad se stvori C1 konstruktor koji nema nijedan parametar se izvršava, jer C1 ne prolazi nijedan parametar. Dok se, kada se stvori C2, konstruktor s parametrom izvršava, jer konstruktoru prosljeđuje dva cjelobrojna broja.

Definicija Destruktora:

peć za sagorijevanje otpadaka je ujedno i funkcija klase koja razmješta memoriju dodijeljenu nekom objektu. Definirano je istim nazivom kao i klasa kojem prethodi a tildom (+) simbol. Destruktori se uvijek nazivaju obratnim redoslijedom konstruktora.

U razredu uvijek postoji jedan destruktor jer ne prihvaća nikakve argumente. Lokalni objekti se uništavaju čim kontrola izvršenja ostavi blok; s druge strane, globalni se objekti uništavaju kada cijeli program prestane. Prerađivač implicitno naziva destruktora. Ako su klase naslijeđene, a klasa je izvedena iz nadređene klase, i klasa djece i roditelj imaju klase destruktora; tada se prvo naziva destruktor izvedene klase, a zatim destruktor roditeljske klase.

Implementacija Destruktora:

klasa Const {int a, b; public: Const (int c, int d) // konstruktor s parametrom. {a = c; c = d; cout << "vrijednosti a i b su" <<>

Kad se stvori C1 objekt, poziva se konstruktor s dva parametra cijelog broja i član "a, b" se inicijalizira i vrijednost "a, b" se uređuje. Nakon toga dolazi do poziva destruktora i "objekt C1 se uništava".

Potreba Destruktora

Stvaranje konstruktora troši određenu količinu memorijskog prostora, jer u konačnici raspoređuje memoriju objektima. Ova dodijeljena memorija mora biti raspoređena prije uništavanja objekata kako bi se oslobodili resursi za druge zadatke. Destruktori su izuzetno korisni za predviđenu svrhu, jer učinkovito uništavaju predmete i obavljaju poslove čišćenja za oslobađanje memorije.

  1. Primarna svrha konstruktora je dodijeliti memoriju objektima kada su stvoreni. Nasuprot tome, glavna svrha destruktora je rasporediti sjećanje na objekt kad je on uništen.
  2. Konstruktoru je dopušteno da prihvati argumente jer se argumenti mogu koristiti za inicijalizaciju podataka članova klase. S druge strane, destruktor ne prihvaća nikakve argumente jer je njegov jedini posao razmještanje memorije objekta.
  3. Konstruktor se zove kada se stvori objekt. Suprotno tome, destruktor se zove kada se program prekine ili program napusti blok u kojem je objekt kreiran.
  4. Konstruktor se obično koristi za inicijalizaciju podataka članova klase, dok se destruktor koristi kako bi objekt izveo neku radnju prije nego što se uništi.
  5. Konstruktori se izvode uzastopnim redoslijedom, što znači da ako postoji izvedena klasa koja nasljeđuje osnovnu klasu i stvara se izvedena klasa, tada će prvo nazvati konstruktor osnovne klase, a zatim konstruktor izvedene klase. Suprotno tome, prvo se naziva destruktor izvedene klase, a zatim bazni razred što znači da se destruktor izvršava u obrnutom redoslijedu konstruktora.
  6. U klasi može biti višestrukih konstruktora koji se identificiraju brojem prenesenih argumenata dok može imati samo jednog destruktora.
  7. Postoji koncept konstruktora kopiranja koji omogućuje da se objekt inicijalizira iz drugog objekta dok destruktor nema takav koncept.
  8. Konstruktori mogu biti preopterećeni za izvršavanje različitih radnji pod imenom istog konstruktora. Naprotiv, destruktori se ne mogu preopteretiti.

Zaključak:

Osim što su sličnost da su konstruktor i destruktor posebna funkcija klase i da imaju isti naziv, bitna razlika između njih obje je: 'konstruktor' se naziva u vrijeme dodjele memorije i 'destruktor' se poziva na vrijeme razmještanja memorije objekata. Prerađivač implicitno naziva i konstruktor i destruktor iako nisu definirani u klasi.