Különbség a kivitelező és a romboló között

Szerző: Laura McKinney
A Teremtés Dátuma: 1 Április 2021
Frissítés Dátuma: 12 Lehet 2024
Anonim
Különbség a kivitelező és a romboló között - Technológia
Különbség a kivitelező és a romboló között - Technológia

Tartalom


A konstruktor és a pusztító tagfunkciók az osztályukkal azonos névvel. Az előző típus konstruktőr segít az objektum inicializálásában. Ezzel szemben: a pusztító különbözik attól a konstruktortól, amely törli a létrehozott konstruktort, ha nincs értelme.

Időnként szükség van egy objektum egy részének inicializálására, mielőtt felhasználható lenne. Például a veremben működünk, mielőtt bármilyen műveletet végrehajtunk, a verem felső részét mindig nullára kell állítani. Az automatikus inicializálás ezt a funkciót a „Constructor” segítségével hajtják végre. Például, ha egy objektumnak valamilyen kódot végre kell hajtania, mielőtt elpusztulna. Például, ha egy objektumnak bezárnia kell a megnyitott fájlt a megsemmisítés előtt. A 'Destructor' segítségével végrehajtható.


Hasonlítsuk össze néhány összehasonlító diagram segítségével az építész és a pusztító közötti alapvető különbségeket

  1. Összehasonlító táblázat
  2. Meghatározás
  3. Főbb különbségek
  4. Következtetés

Összehasonlító táblázat:

Az összehasonlítás alapjaKonstruktőrPusztító
Célja

A memóriát egy objektumhoz rendeli.Az objektum memóriáját foglalja le.
Nyilatkozat osztály_neve (érvek, ha vannak) {};~ osztálynév (argumentumok nélkül) {};
érvek A kivitelező elfogadja az érvet A Destructor semmilyen érvet nem fogad el.
HívásA kivitelezőt automatikusan meghívják az objektum létrehozása közben.A pusztítót automatikusan meghívják, amikor a mondatból kilépnek vagy a program leáll.
DolgozóA konstruktor lehetővé teszi egy objektum számára, hogy inicializálja annak értékét, mielőtt felhasználná.A Destructor lehetővé teszi egy objektum számára, hogy végrehajthasson valamilyen kódot a pusztításkor.
A végrehajtás sorrendje

A konstruktorokat egymás utáni sorrendben hívják.
A pusztítókat a konstruktor fordított sorrendjében hívják.
Számban Egy osztályban több konstruktor is lehet.Az osztályban mindig van egyetlen pusztító.
Másoló kivitelező A kivitelező másolása lehetővé teszi a kivitelezőnek, hogy deklaráljon és inicializáljon egy objektumot egy másik objektumból.Nincs ilyen koncepció.
Túlterhelés A konstruktorok túlterhelhetők.A pusztítót nem lehet túlterhelni.


A konstruktor meghatározása:

A konstruktőr alapvetően egy osztály tagfüggvénye, amely inicializálja az objektumot és hozzárendel memóriát. A konstruktorok könnyen azonosíthatók, mivel deklarálva vannak és ugyanazzal a névvel vannak meghatározva, mint az osztályé. A kivitelezőnek nincs visszatérő típusa; tehát nem adnak vissza semmit, még „semmisnek” sem. Az építőt mindig egy osztály nyilvános részében definiálják.

Egy osztályban több konstruktor is lehet; megkülönböztethetők az átadott érvek száma és típusa alapján. Ha egy osztályban több konstruktor van; velük együtt kell meghatározni az implicit konstruktort (semmit nem tevő konstruktort); nem tesz semmit, de kielégíti a fordítót.

A kivitelezők az alapértelmezett argumentumokkal is meghatározhatók. Mivel a tárgyat „dinamikusan” is inicializálják. A konstruktorok sem örökölhetők, sem virtuálisak, de túlterhelhetők. Nem lehet utalni a címre.

Konstruktorok típusai

Alapvetően háromféle konstruktor létezik: alapértelmezett, paraméteres és másolatos konstruktorok.

  • Alapértelmezett kivitelező: Ez egy konstruktor, ahol nem érvelnek a konstruktor számára. Az alapértelmezett konstruktornak nincs paramétere, de az értékek az alapértelmezett konstruktorhoz alapértelmezés szerint átadhatók (dinamikusan).
  • Paraméterezett kivitelező: Ez a konstruktor veszi az érveket; érvekként különböző értékeket továbbíthatunk az adattagok számára.
  • Másoló kivitelező: A másolási konstruktor különbözik a többi típusú konstruktortól, mivel argumentumként elfogadja a másik objektum címét.

Kivitelező kivitelezése:

osztály Const {int a, b; public: Const () // konstruktor paraméter nélkül {a = 0; b = 0; } Const (int c, int d) {// konstruktor a = c paraméterrel; c = d; }}; int main () {Const C1; C2 (10,20); // ez az állítás kivitelezőt hív fel}

A C1 létrehozásakor egy paraméter nélküli konstruktor kerül végrehajtásra, mivel a C1 nem ad át egyetlen paramétert sem. Mivel a C2 létrehozásakor a paraméterrel rendelkező konstruktor végrehajtásra kerül, mivel két egész számot ad át a konstruktornak.

A pusztító meghatározása:

A Pusztító szintén egy osztály tagfüggvénye, amely elosztja az objektumhoz hozzárendelt memóriát. Ez ugyanazzal a névvel van meghatározva, mint egy osztály, amelyet egy a előz meg hullámvonal (~) szimbólum. A pusztítókat mindig a konstruktorok fordított sorrendjében hívják.

Az osztályban mindig van egyetlen pusztító, mivel nem fogad el semmilyen érvet. A helyi objektumokat elpusztítják, amint a végrehajtás irányítása elhagyja a blokkot; másrészt a globális objektumok megsemmisülnek, amikor a teljes program leáll. A pusztítót implicit módon fordító hívja. Ha az osztályok öröklődnek, és egy osztály származik egy szülőosztályból, és mind a gyermekosztály, mind a szülőosztály rendelkezik destruktorokkal; akkor először a származtatott osztály pusztítóját hívják, majd a szülő osztály pusztítóját hívják.

A Destructor megvalósítása:

osztály Const {int a, b; public: Const (int c, int d) // konstruktor paraméterrel. {a = c; c = d; cout << "az a és b értéke" <<>

A C1 objektum létrehozásakor két egész számú paraméterrel rendelkező konstruktort hívnak meg, és az „a, b” tag inicializálódik, és az „a, b” értéke szerkesztésre kerül. Ezután a romboló meghívásra kerül, és így „a C1 tárgy elpusztul”.

A romboló igénye

A konstruktor létrehozása némi memóriaterületet igényel, mivel végül memóriát allokál az objektumokhoz. Ezt a kiosztott memóriát az objektumok megsemmisítése előtt el kell osztani, hogy megszabadítsák az erőforrásokat más feladatok elvégzéséhez. A pusztítók rendkívül hasznosak a rendeltetési célokra, amelyek hatékonyan elpusztítják a tárgyakat, és tisztítási feladatokat végeznek a memória felszabadítása céljából.

  1. A konstruktor elsődleges célja az, hogy memóriát rendeljen az objektumokhoz, amikor azok létrejönnek. Ellenkezőleg, a pusztító fő célja az objektum memóriájának elhelyezése, amikor az megsemmisül.
  2. A konstruktor megengedheti az argumentumok elfogadását, mivel az argumentumok felhasználhatók az osztály adatainak inicializálására. Másrészt, a pusztító nem fogad el érveket, mivel egyetlen feladata az objektum memóriájának elkülönítése.
  3. Objektum létrehozásakor hívják az építőt. Ezzel szemben a pusztítót akkor hívják meg, amikor a programot megszüntetik, vagy a program kilép a blokkból, amelyben egy objektum létrejön.
  4. A konstruktort általában az osztály adatainak inicializálására használják, míg a pusztítót arra használják, hogy az objektum valamilyen műveletet végrehajthasson, mielőtt elpusztulna.
  5. A konstruktorokat egymás utáni sorrendben hajtjuk végre, vagyis ha van egy származtatott osztály, amely örökli az alaposztályt, és létrehozzuk a származtatott osztály objektumát, akkor először az alap osztály konstruktorát, majd a származtatott osztály konstruktorát hívjuk. Ezzel szemben a származtatott osztály pusztítóját először hívják, majd az alap osztálynak, ez azt jelenti, hogy a pusztítót a konstruktor fordított sorrendjében hajtják végre.
  6. Az osztályban lehet több konstruktor, amelyeket az átadott számargumentumok azonosítanak, míg csak egy pusztítóval lehet.
  7. Van egy koncepció a másoló-konstruktorról, amely lehetővé teszi egy objektum inicializálását egy másik objektumtól, míg a pusztítónak nincs ilyen koncepciója.
  8. A konstruktorok túlterhelhetők, hogy ugyanazon konstruktor neve alatt különböző műveleteket hajtsanak végre. Éppen ellenkezőleg, a destruktorokat nem lehet túlterhelni.

Következtetés:

A hasonlóságon túlmenően, hogy a konstruktor és a pusztító egy osztály speciális tagfüggvénye, és azonos névvel rendelkeznek, a két különbség lényeges különbsége az, hogy az „építőt” hívják a memória allokációjakor, a „destruktort” pedig az az objektumok memória foglalkozási ideje. Mind a konstruktort, mind a destruktort a fordító implicit módon hívja, annak ellenére, hogy nincsenek meghatározva az osztályban.