
Apžvelgsime kai kuriuos pagrindinius skirtumus tarp konstruktoriaus ir destruktoriaus palyginimo lentelės pagalba
Palyginimo diagrama:
Palyginimo pagrindas | Konstruktorius | Destruktorius |
---|---|---|
Tikslas | Jis skiria atmintį objektui. | Jis skiria objekto atmintį. |
Deklaracija | class_name (argumentai, jei yra) {}; | ~ class_name (be argumentų) {}; |
Argumentai | Konstruktorius priima argumentą | „Destructor“ nepriima jokių argumentų. |
Skambinimas | Konstruktorius vadinamas automatiškai, kai objektas sukuriamas. | Destruktorius vadinamas automatiškai, nes blokas yra išjungtas arba programa baigiama. |
Darbas | Konstruktorius leidžia objektui inicijuoti tam tikrą vertę prieš tai, jis naudojamas. | „Destructor“ leidžia objektui įvykdyti tam tikrą kodą jo sunaikinimo metu. |
Vykdymo tvarka | Konstruktorius vadinamas eilės tvarka. | Destruktorius vadinamas atvirkštine konstruktoriaus tvarka. |
Skaičiai | Klasėje gali būti daug konstruktorių. | Tačiau klasėje visada yra vienas destruktorius. |
Kopijavimo konstruktorius | Kopijavimo konstruktorius leidžia konstruktoriui deklaruoti ir inicijuoti objektą iš kito objekto. | Nėra tokios koncepcijos. |
Perkrova | Konstruktoriai gali būti perkrauti. | Destruktorius negali būti perkrautas. |
Konstruktoriaus apibrėžimas:
Konstruktorius iš esmės yra klasės narys, kuris inicijuoja objektą ir priskiria jam atmintį. Konstruktoriai gali būti lengvai atpažįstami, nes jie yra paskelbti ir apibrėžti tokiu pačiu pavadinimu kaip ir klasė. Konstruktorius neturi jokio grąžinimo tipo; taigi, jie nieko negrąžina, net „negalioja“. Konstruktorius visada apibrėžiamas viešoje klasės dalyje.
Klasėje gali būti keli konstruktoriai; juos galima atskirti remiantis priimtų argumentų skaičiumi ir tipu. Jei klasėje yra keletas konstruktorių; netiesioginis konstruktorius (do-nieko konstruktorius) turi būti apibrėžtas kartu su jais; ji nieko nedaro, bet patenkina kompiliatorių.
Konstruktoriai taip pat gali būti apibrėžti su numatytais argumentais. Kadangi jie taip pat inicijuoja objektą „dinamiškai“. Konstruktoriai negali būti nei paveldimi, nei gali būti virtualūs, tačiau jie gali būti perkrauti. Jie negali būti nukreipti į jų adresą.
Konstruktoriaus įgyvendinimas:
klasė Const {int a, b; public: Const () {// konstruktorius be parametro a = 0; b = 0; } Konst. (Int c, int d) {// konstruktorius su parametru a = c; c = d; }}; int main () {Const C1; C2 (10, 20); // šis pareiškimas skatina konstruktorių}
Kai C1 yra sukurtas, konstruktorius, kurio parametras nepasiekiamas, įvyksta, nes C1 neperduoda jokio parametro. Kadangi, kai C2 sukuriamas, įvykdomas konstruktorius su parametru, nes jis duoda sveikiems skaičiams konstruktoriui.
Destruktoriaus apibrėžimas:
„Destructor“ taip pat yra klasės funkcija, kuri paskirsto objektui priskirtą atmintį. Jis apibrėžiamas taip pat, kaip ir klasės pavadinimas, prieš kurį yra simbolis „tilde“ (~). Destruktoriai visada vadinami atvirkštine konstruktorių tvarka.
Klasėje visada yra vienas sunaikintuvas, nes jis nepriima jokių argumentų. Vietiniai objektai yra sunaikinami, kai tik kontroliuoja vykdymą bloką; kita vertus, pasauliniai objektai sunaikinami, kai visa programa baigiasi. Destuktorių netiesiogiai vadina kompiliatorius. Jei klasės yra paveldimos, o klasė yra kilusi iš tėvų klasės ir tiek vaikų klasė, tiek tėvų klasė turi destruktorių; tada išvestos klasės naikintojas vadinamas pirmiausia, po to seka patronuojančios klasės destruktorius.
Destruktoriaus įgyvendinimas:
klasė Const {int a, b; viešas: Const (int c, int d) {// konstruktorius su parametru. a = c; c = d; cout << "a ir b vertė yra" <Kai sukuriamas C1 objektas, iškviečiamas konstruktorius su dviem sveikojo skaičiaus parametrais, o narys „a, b“ inicijuojamas, kai spausdinama „a, b“ reikšmė. Po to destruktorius bus iškviestas ir išspausdintas pranešimas „objektas C1 sunaikintas“.
Pagrindiniai skirtumai tarp konstruktorių ir naikintuvų
- Pagrindinis konstruktoriaus tikslas yra priskirti atmintį objektams, kai jie yra sukurti, o pagrindinis naikintojo tikslas - ištrinti objekto atmintį, kai ji sunaikinama.
- Konstruktoriui leidžiama priimti argumentus, nes argumentai gali būti naudojami duomenų grupės nariams inicijuoti. Sunaikintojas nepriima jokių argumentų, nes vienintelis jo darbas yra objekto atminties pašalinimas.
- Konstruktorius vadinamas, kai sukuriamas objektas. Kita vertus, naikintojas vadinamas, kai programa nutraukiama arba programa išeina iš bloko, kuriame sukurtas objektas.
- Konstruktorius paprastai naudojamas klasių duomenų nariams inicijuoti, o destruktorius naudojamas tam, kad objektas atliktų tam tikrą veiksmą prieš jį sunaikinant.
- Konstruktoriai vykdomi eilės tvarka, o tai reiškia, kad yra išvestinė klasė, kuri paveldi bazinę klasę, o išvestos klasės objektas sukuriamas tada, kai jis pirmą kartą paskambins bazinės klasės konstruktorių ir tada išvestinės klasės konstruktorių. Kita vertus, išvestos klasės naikintojas vadinamas pirmiausia, o tada bazinė klasė reiškia, kad destruktorius vykdomas atvirkštine konstruktoriaus tvarka.
- Klasėje gali būti keli konstruktoriai, kurie yra identifikuojami pagal priimtus skaičių argumentus. Klasėje yra tik vienas destruktorius.
- Yra kopijos konstruktoriaus sąvoka, kuri leidžia objektui inicijuoti iš kito objekto, o destruktorius neturi tokios sąvokos.
- Konstruktoriai gali būti perkrovos atlikti skirtingus veiksmus pagal to paties konstruktoriaus pavadinimą, o destruktoriai negali būti perkrauti.
Išvada:
Be panašumo, kad konstruktorius ir destruktorius yra ypatinga klasės nario funkcija ir turi tą patį pavadinimą, pagrindinis skirtumas tarp abiejų yra „konstruktorius“ vadinamas atminties paskirstymo metu ir „destruktorius“ vadinamas objektų atminties paskirstymo laikas. Tiek konstruktorius, tiek destruktorius yra netiesiogiai vadinami kompiliatoriumi, nors jie nėra apibrėžti klasėje.