Különbség a kivitelező és a romboló között
Tartalom
- Összehasonlító táblázat:
- A konstruktor meghatározása:
- Konstruktorok típusai
- Kivitelező kivitelezése:
- A pusztító meghatározása:
- A Destructor megvalósítása:
- A romboló igénye
- Következtetés:
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
- Összehasonlító táblázat
- Meghatározás
- Főbb különbségek
- Következtetés
Összehasonlító táblázat:
Az összehasonlítás alapja | Konstruktőr | Pusztí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ás | A 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.
- 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.
- 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.
- 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.
- 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.
- 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.
- Az osztályban lehet több konstruktor, amelyeket az átadott számargumentumok azonosítanak, míg csak egy pusztítóval lehet.
- 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.
- 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.