Az osztály és a struktúra közötti különbség A különbség a
Mielőtt megértenük az osztály és a struktúrák közötti különbséget, tudnunk kell néhány alapvető elgondolást, ami ezekhez kapcsolódik. A fogalmak megértése nélkül nehéz megérteni a kettő közötti különbségeket.
Mi az osztály és az objektum:
Ezek az objektumorientált programozáshoz kapcsolódó két fontos fogalom, amelyek alapul szolgálnak a funkciók és az adatok más funkciókhoz való átadásához. A jobb megértés érdekében korrelálhatunk egy valós életmóddal. Egy osztály lehet egy bolt, és egy objektum lehet az egyes egyedi áruházak, mint például az élelmiszerbolt, az írószerek, a gyümölcs stb. Az objektumok a fő osztály közös tulajdonságait - az áruházat - az objektumok rendelkezhetnek saját exkluzív tulajdonságokkal, mint pl. egyedi tervezéssel, világítással stb. Az objektumokon keresztül ténylegesen használhatjuk az osztályt; ők egy osztály példányait alkotják.
Osztály szintaxisa
Osztály Store {
public string dolgok;
public string design;
}
Objektum szintaktikája
Store food store = új áruház ();
Store Stationery = új áruház ();
Mi a struktúra?
A Struct csak az adatokat tartalmazza, ezért hasznos az egyes adatigényeket a Struct objektumokon keresztül. Az osztálytól eltérően nincs funkciója. Itt van a szintaxisa:
struct grocery_entrance {
char bejáratnév [50];
int entrance_size;
} grocery_entrance;
Minden áruház a Struct 'bejárattal' használható egyedi nevekkel és méretekkel.
Mi az örökség?
Ez hasonlít arra, hogy a fiú örökölte az apja birtokát, és a fiú is hozzá tud adni más saját tulajdonát. Az Osztály lehet egy alap osztály vagy egy származtatott osztály, amelyben az előbbi a bázist képezheti. A származtatott osztály csak néhány egyéb tulajdonságot ad hozzá önmagához, kivéve az alaposztálytól. Ha a fenti példát vesszük figyelembe, a bolt még mindig származhat egy adott élelmiszerboltba, például a XYZ élelmiszerboltba.
Most, hogy ismerjük az alapfogalmakat, meg tudjuk felelni a tényleges különbséget az osztály és a struktúra között.
Hogyan különböznek?
- Újrafelhasználhatóság: Mivel az osztályok alkotják az alap keretet, újra felhasználhatók; A Structs azonban egyedi tulajdonságokkal rendelkező elemek, ezért nem használható fel újra. Például az élelmiszerbolt osztály bármely típusú élelmiszerbolthoz használható, de a Struct grocery_entrance egyedülálló erre a célra, és nincs értelme újra felhasználni más osztályokban.
- Láthatóság: Az osztály összes funkciója nyilvánosan elérhető az objektumok számára.Például egy "árucikk" nevű funkció van az "áruház" osztály alatt. A "dolgok" funkció minden Objektumának, például "élelmiszerboltnak", "írószerraktárnak", stb. Látható. Az ilyen jellegű láthatóság nem lehetséges az Structs-el, mivel a struktúrák adatai önmagukra korlátozódnak, és nem láthatóak más Structs-okhoz. A dolgok világossá tételéhez elmondhatjuk, hogy a "grocery_entrance" adatai nem minden más üzlet számára nyilvánosan láthatók.
- Átvitel referencia és áthaladási érték szerint: Átvitel referencia szerint csak a memóriahelyet, és nem a tényleges adatokat jeleníti meg a funkciókhoz. Ez azt jelenti, hogy amikor az érték változik, a változás a megfelelő funkciókban jelenik meg. Az átadás érték szerint viszont csak értéket ad a függvénynek. Ebben az esetben a küldési érték megváltozása nem jelenik meg a függvényben. Az osztály használatát referenciaként adják át, a Struct pedig pass értéket használ.
- Öröklés: Az osztályok tovább öröklődhetnek az alosztályok létrehozásához, de a Structs nem használhatja az örökséget. Például az Osztálybolt funkcióit az alosztály "élelmiszerboltja" adja. De a Struct 'grocery_entrance' nem örökölhet semmilyen funkciót. Azt mondhatjuk, hogy itt nincs olyan koncepció, mint az al-struktúra.
- Alapértelmezett láthatóság: Az osztály összes tagját alapértelmezésként magánszemélyként tartják, míg a Struktúrák tagjai alapértelmezés szerint nyilvánosak.
- Az üres osztály és a szerkezetek: Az osztály egy üres méretű 1 Byte méretűet is használ, míg a Struct nem használ memóriát üresen. Ez azt jelenti, hogy az üres struktúra mérete 0 bájtnak felel meg.
- Szemétgyűjtés: A szemétgyűjtés az osztályokkal lehetséges, mivel ezeket referenciaként használják. Ezért könnyebb elvégezni a tisztítást egy olyan helyen, ahol az adatokat tárolják. Másrészről a Struct nem képes szemétgyűjtésre, mivel érték szerint használja, és az adatok szétszóródnak különböző helyeken.
- Memória kezelése: Mivel az osztály lehetővé teszi a szemétgyűjtéseket, a memóriakezelés is hatékony; ez azonban nem olyan hatékony, mint a Structs.
- Konstruktor: A konstruktor általában meghatározott értékekkel inicializálja az osztályt. Meg tudjuk nézni, mint valami, amit inicializáltak az értékekkel. Ha új osztályt kell létrehozni, akkor a konstruktort úgy hívják, hogy erre a példányra kiosztja a memóriát. Az értékeket argumentumként is átadhatjuk, amikor egy konstruktort hívunk. Lépjünk a tényleges vitánkba. Az osztályok lehetővé teszik mindenféle konstruktorok létrehozását, például argumentumokkal vagy anélkül, míg a struktúrák csak akkor engedik meg a konstruktoroknak argumentumokat, i. e. a paraméterezett konstrukciókat.
- Destruktor: Minden olyan esetben, amikor egy osztály egy példányát törölni kell, egy megsemmisítőt hívunk le. A megsemmisítő ezután törli az adott példányt, és felszabadítja a memóriát. Egy osztály használhat egy megsemmisítőt, míg egy struktúra nem képes.
- Tagváltozók inicializálása: Az osztályokban közvetlenül módosíthatjuk a tagváltozókat; az ilyen inicializálás nem lehetséges a Structs-el.
- Objektum létrehozása: Az objektumok létrehozásának általános szintaxisa az osztályokban:
Demo obj = új Demo ();
Ez azt jelenti, hogy az "új" kulcsszót kell használni az osztályok objektumainak létrehozása során.Ez nem szükséges a Structs objektumok létrehozásakor. Csak vessünk egy pillantást a szintaxisukra:
Demo obj;
Az "új" kulcsszó nélkül tökéletesen működik.
Mikor kell használni az osztályt és mikor kell használni a struktúrát?
Mivel az osztályok rugalmasabbak az adatok és a funkciók együttes átadása során, akkor is megyünk, amikor a felhasznált objektumok összetettek és nagyok. Példánkban a Mall az "áruház" osztályt használhatja a rendszer jobb kifejezésére. A Structs azonban kisebb tárgyakra korlátozódik, mivel viszonylag kevésbé hatékonyak, mint az osztályok. Ezért, ha saját készletét tervezed, a Structs a jobb választás.
Hogyan lehet egy struktúrát átalakítani egy osztályba és egy versenytársra?
Lehet, hogy hallottad a "box" és az "unboxing" kifejezést, hogy egy struktúrát osztályba konvertálj, és fordítva. Bár ezek a hatékony folyamatok segítenek nekünk a konverzióban, óvatosan kell őket kezelni. Mivel ez közvetlenül érinti a memóriahelyeket, hatalmas hatással van a rendszerünk teljesítményére. Ezenkívül hatással van a szemétgyűjtési folyamatokra, és a rendszer általános hatékonyságát eredményezi. Ezért csak szükség esetén használja ezeket a konverziókat.
Nézzük meg a fent említett eltéréseket táblázatos formában.