Tekintsük át a konstruktor és a destruktor közötti különbségeket az összehasonlító táblázat segítségével
Összehasonlító táblázat:
Az összehasonlítás alapja | Konstruktőr | Pusztító |
---|---|---|
Célja | Elosztja a memóriát egy objektumhoz. | Elosztja az objektum memóriáját. |
Nyilatkozat | class_name (argumentumok, ha vannak) {}; | ~ class_name (nincs argumentum) {}; |
érvek | A Constructor elfogadja az érvet | A Destructor nem fogad el semmilyen érvet. |
Hívás | A konstruktort az objektum létrehozásakor automatikusan hívják. | A rombolót automatikusan hívják, mivel a blokk kilép vagy a program befejeződik. |
Dolgozó | A Konstruktor lehetővé teszi, hogy az objektum egy bizonyos értéket inicializáljon, mielőtt használná. | A Destructor lehetővé teszi, hogy az objektum megsemmisítéskor végrehajtson egy kódot. |
Végrehajtási sorrend | A konstruktort egymást követő sorrendben hívják. | A destruktort a konstruktor fordított sorrendjében hívják. |
Számokban | Az osztályban több kivitelező is lehet. | De az osztályban mindig van egyetlen romboló. |
Másolószerkezet | A másolás-konstruktor lehetővé teszi, hogy a kivitelező egy objektumot egy másik objektumról deklaráljon és inicializáljon. | Nincs ilyen fogalom. |
Túlterhelés | A konstruktorok túlterhelhetők. | A destruktort nem lehet túlterhelni. |
Konstruktor meghatározása:
A konstruktor alapvetően az osztály tagfüggvénye, amely inicializálja az objektumot és hozzárendeli a memóriát. A konstruktorok könnyen azonosíthatók, mivel azokat az osztály azonos nevével azonosították. A kivitelezőnek nincs visszatérési típusa; így nem térnek vissza semmit, nem is „semmisnek”. A Constructor mindig egy osztály nyilvános részében van meghatározva.
Egy osztályban több konstruktor is lehet; megkülönböztethetők az elfogadott érvek számától és típusától függően. Ha egy osztályban több konstruktor van; az implicit konstruktort (do-nothing konstruktort) meg kell határozni velük együtt; nem tesz semmit, csak kielégíti a fordítót.
A konstruktorokat az alapértelmezett argumentumok is meghatározhatják. Míg a „dinamikusan” is inicializálják az objektumot. A konstruktorok sem örökölhetők, sem virtuálisak, de túlterhelhetők. Nem hivatkozhatnak a címükre.
A kivitelező megvalósítása:
Const osztály {int a, b; nyilvános: Const () {// konstruktor, paraméter nélkül a = 0; b = 0; } Const (int c, int d) {// konstruktor az a = c paraméterrel; c = d; }}; int main () {Const C1; C2 (10, 20); // ez a nyilatkozat felhívja a konstruktort}
Ha C1-t hoz létre, akkor a konstruktor nem lesz végrehajtva, mivel a C1 nem adja át a paramétereket. Míg, amikor a C2-t létrehoztuk, akkor a konstruktorral végrehajtjuk a paramétert, mivel két egész számot ad át a konstruktornak.
A Destructor meghatározása:
A Destructor szintén egy osztály tagfüggvénye, amely az objektumhoz rendelt memóriát osztja el. Ugyanazzal a névvel van meghatározva, mint egy osztályé, amelyet egy tilde (~) szimbólum követ. A rombolókat mindig a konstruktorok fordított sorrendjében hívják.
Egy osztályban mindig van egyetlen destruktor, mivel nem fogad el semmilyen érvet. A helyi objektumok megsemmisülnek, amint a végrehajtás ellenőrzése letiltja a blokkot; másrészt a globális objektumok megsemmisülnek, amikor a teljes program véget ér. A destruktort implicit módon egy fordító hívja. Ha az osztályok öröklődnek, és egy osztály a szülő osztályból származik, és mind a gyermekosztály, mind a szülőosztály destruktorokkal rendelkezik; ekkor először a származtatott osztály pusztítóját hívják, ezt követi a szülő osztály destruktora.
A Destructor megvalósítása:
Const osztály {int a, b; nyilvános: Const (int c, int d) {// konstruktor paraméterrel. a = c; c = d; cout << "a és b értéke" <Amikor C1 objektumot hozunk létre, akkor egy egész típusú típusú paraméterrel rendelkező konstruktort hívnak meg, és az „a, b” tag inicializálva lesz, ha az „a, b” értéket kinyomtatja. Ezt követően a destruktor meghívást kap, és kinyomtatja az „objektum C1 megsemmisült” üzenetet.
A konstruktorok és a rombolók közötti különbség
- A kivitelező fő célja, hogy a memóriát a létrehozott objektumokhoz hozzárendelje, míg a destruktor fő célja az objektum memóriájának megsemmisítéskor történő elosztása.
- A konstruktor elfogadhatja az érveket, mivel az argumentumok felhasználhatók az osztály adatainak inicializálására. A destruktor nem fogad el semmilyen érvet, mivel az egyetlen munkája az objektum memóriájának elosztása.
- Egy objektum létrehozásakor egy konstruktort hívnak. Másrészről, egy destruktort hívnak, amikor egy program befejeződik, vagy a program kilép a blokkból, amelyben az objektum jön létre.
- A konstruktort általában az osztály adattagjainak inicializálására használják, míg egy destruktort használnak annak érdekében, hogy az objektum bizonyos műveleteket hajtson végre, mielőtt megsemmisítené.
- A konstruktorokat az egymást követő sorrendben hajtják végre, ami azt jelenti, hogy létezik olyan származtatott osztály, amely örökli az alaposztályt, és a származtatott osztály objektuma jön létre, majd először az alaposztály konstruktorát, majd a származtatott osztály építőjét hívja. Másrészt a származtatott osztály rombolója az első, majd az alaposztály azt jelenti, hogy a destruktort a konstruktor fordított sorrendjében hajtják végre.
- Az osztályban több konstruktor is létezhet, amelyeket a megadott számú argumentum azonosít. Az osztályban csak egy destruktor van.
- Van egy másolat-konstruktor fogalma, amely lehetővé teszi az objektum egy másik objektum inicializálását, míg a destruktornak nincs ilyen fogalma.
- A konstruktorok túlterheltek lehetnek, hogy ugyanazzal a konstruktorral különböző műveleteket hajtsanak végre, míg a destruktorokat nem lehet túlterhelni.
Következtetés:
A hasonlóság mellett, hogy a konstruktor és a destruktor egy osztály különleges tagfunkciója, és ugyanaz a neve van, az alap különbség mindkettőjük között az, hogy a „konstruktor” a memóriaelosztás idején hívható meg, a „destruktor” pedig a az objektumok tárolási ideje. Mind a konstruktort, mind a destruktort implicit módon a fordító hívja meg, még akkor is, ha az osztályban nincs meghatározva.