Razlika između konstruktora i destruktora
Sadržaj
- Usporedni grafikon:
- Definicija konstruktora:
- Vrste konstruktora
- Implementacija konstruktora:
- Definicija Destruktora:
- Implementacija Destruktora:
- Potreba Destruktora
- Zaključak:
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
- Usporedni grafikon
- definicija
- Ključne razlike
- Zaključak
Usporedni grafikon:
Osnove za usporedbu | Konstruktor | peć 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. |
zvanje | Dok se objekt kreira, konstruktor se poziva automatski. | Destruktor se poziva automatski, nakon izlaska bloka ili prekida programa. |
Radna | Konstruktor 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.
- 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.
- 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.
- 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.
- 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.
- 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.
- U klasi može biti višestrukih konstruktora koji se identificiraju brojem prenesenih argumenata dok može imati samo jednog destruktora.
- Postoji koncept konstruktora kopiranja koji omogućuje da se objekt inicijalizira iz drugog objekta dok destruktor nema takav koncept.
- 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.