Rozdíl mezi třídou a strukturou

Než pochopíme rozdíl mezi třídou a strukturou, měli bychom znát několik základních pojmů, které jsou s nimi spojeny. Bez pochopení pojmů je obtížné pochopit rozdíly mezi nimi.

Co je třída a předmět:

Jedná se o dva důležité pojmy související s objektově orientovaným programováním a tvoří základ pro sestavení funkcí a předávání dat dalším funkcím. Pro lepší pochopení ji můžeme sladit s příkladem skutečného života. Třídu lze považovat za obchod a objekt může být kterýkoli z jednotlivých konkrétních obchodů, jako jsou potraviny, papírnictví, ovoce atd. Všechny objekty sdílejí společné vlastnosti hlavní třídy - obchod - a naopak, objekty mohou mít své vlastní exkluzivní vlastnosti, jako je konkrétní design, osvětlení atd. Prostřednictvím objektů můžeme skutečně použít třídu; tvoří příklady třídy.

Syntax třídy

Třídní obchod

věci z veřejných řetězců;

design veřejných řetězců;

Syntaxe objektu

Obchod s potravinami = nový obchod ();

Store Stationery = new Store ();

Co je struktura?

Struktura obsahuje pouze data, a proto je užitečné při vytváření individuálních požadavků na data prostřednictvím objektů Struktura. Na rozdíl od třídy postrádá funkce. Zde je jeho syntax:

struct grocery_entrance

char entry_name [50];

int vchod_size;

grocery_entrance;

Všechny obchody mohou používat „vchod“ struktury s jednotlivými jmény a velikostmi.

Co je dědičnost?

Je to podobné tomu, jak syn zdědí majetek svého otce, a na druhé straně může syn přidat i další vlastní majetek. Třída může být buď základní třída nebo odvozená třída, ve které může být první považována za základnu pro vytvoření druhé třídy. Odvozená třída přidává několik dalších vlastností pro sebe, kromě toho, co získává ze základní třídy. Když vezmeme v úvahu výše uvedený příklad, obchod s potravinami může být stále odvozen od konkrétního obchodu s potravinami, jako je obchod s potravinami XYZ.

Nyní, když jsme obeznámeni se základními pojmy, můžeme jít do skutečného rozdílu mezi třídou a strukturou.

Jak se liší?

  • Opakovaná použitelnost: Protože třídy tvoří základní rámec, lze je znovu použít; Struktury jsou však jednotlivé prvky se specifickými vlastnostmi, takže je nelze znovu použít. Například třída obchodu s potravinami může být použita pro jakýkoli typ obchodu s potravinami, ale struktura grocery_entrance je specifická pouze pro tento účel a nemá smysl ji znovu použít v jiných třídách..
  • Viditelnost: Všechny funkce třídy jsou veřejně dostupné pro její objekty. Například máme ve třídě „store“ funkci nazvanou „things“. Funkce 'věci' je viditelná pro všechny její objekty, jako je 'obchod s potravinami,' papírnictví 'atd. Taková viditelnost není u Struktur možná, protože data Struktury jsou omezena na sebe a nejsou viditelná pro jiné Struktury. Abychom to vyjasnili, můžeme říci, že data „grocery_entrance“ nejsou veřejně viditelná ve všech ostatních obchodech.
  • Předat podle reference a předat podle hodnoty: Funkce Pass by Reference odesílá do funkcí pouze umístění paměti a nikoli skutečná data. To znamená, že při každé změně hodnoty se změna projeví v odpovídajících funkcích. Pass by value zase posílá hodnotu do funkce. V tomto případě se změna hodnoty po jejím odeslání neodráží ve funkci. Třída používá předat odkaz a Struktura používá předat hodnotu.
  • Dědictví: Třídy mohou být dále zděděny, aby vytvořily podtřídy, ale Struktury nemohou využít dědičnost. Například třídní obchod poskytuje své funkce podtřídě „obchod s potravinami“. Struktura 'grocery_entrance' však nemůže zdědit žádnou funkci. Můžeme říci, že zde neexistuje žádný koncept jako substruktura.
  • Výchozí viditelnost: Všichni členové třídy jsou ve výchozím nastavení vedeni jako soukromé subjekty, zatímco členové struktury jsou ve výchozím nastavení uchováni jako veřejné subjekty.
  • Velikost prázdné třídy a struktury: Třída používá velikost 1 bajt, i když je prázdná, zatímco Struktura nikdy nepoužívá žádnou paměť, když je prázdná. To znamená, že můžeme říci, že velikost prázdné struktury se rovná 0 bajtů.
  • Sběr odpadu: Sběr odpadu je možný u tříd, protože používají odkaz. Proto je snazší provést vyčištění na jednom místě, kde jsou uložena data. Na druhou stranu, sběr odpadu není možný u Struct, protože používá pass by value a data jsou rozptýlena na různých místech.
  • Správa paměti: Protože třída umožňuje sběr odpadu, je také efektivní správa paměti; u struktur však to není tak efektivní.
  • Konstruktor: Konstruktor obecně inicializuje třídu s určitými zadanými hodnotami. Můžeme se na to dívat jako na něco, co bylo inicializováno hodnotami. Pokud je třeba vytvořit novou třídu, je konstruktor volán pro přidělení paměti pro tuto instanci. Při volání konstruktoru můžeme dokonce předat hodnoty jako argumenty. Pojďme nyní k naší skutečné diskusi. Třídy umožňují konstruktéry všech typů, například s argumenty nebo bez argumentů, zatímco struktury umožňují konstruktorům pouze argumenty, tj. Parametrizované konstruktory.
  • Ničitel: Destruktor se nazývá kdykoli je třeba odstranit instanci třídy. Destruktor zase odstraní tuto instanci a uvolní paměť. Třída může použít destruktor, zatímco Struktura nemůže.
  • Inicializace proměnných členů: Ve třídách můžeme inicializovat členské proměnné přímo; taková inicializace u struktur není možná.
  • Vytvoření objektu: Obecná syntaxe pro vytváření objektů ve třídách je:

Demo obj = new Demo ();

To znamená, že při vytváření objektů třídy musíme použít klíčové slovo „nové“. To není nutné při vytváření objektů struktur. Stačí se podívat na jejich syntaxi:

Demo obj;

Funguje to perfektně i bez klíčového slova „nové“.

Kdy použít třídu a kdy použít strukturu?

Protože třídy jsou flexibilnější při předávání dat a funkcí dohromady, můžeme se o to snažit, když jsou použité objekty složité a velké. V našem příkladu může Mall použít třídu „store“ k lepšímu vyjádření systému. Struktury jsou však omezeny na menší objekty, protože jsou relativně méně efektivní než třídy. Pokud tedy navrhujete vlastní obchod, Struktury jsou tou lepší volbou.

Jak převést strukturu na třídu a naopak?

Možná jste slyšeli výrazy „box“ a „rozbalení“, abyste převedli strukturu na třídu a naopak. I když se jedná o efektivní procesy, které nám pomáhají při přeměně, mělo by se s nimi zacházet opatrně. Protože to přímo ovlivňuje umístění paměti, má obrovský dopad na výkon našeho systému. Kromě toho ovlivňuje procesy sběru odpadu a vede k celkové neefektivnosti systému. Proto tyto převody používejte pouze v případě potřeby.

Podívejme se na výše uvedené rozdíly v podobě tabulky.

S. Ne Koncepty Rozdíly
Třída Struktura
1 Opakovaná použitelnost Zcela znovu použitelné Nelze znovu použít
2 Viditelnost Všechny funkce třídy jsou viditelné pro její objekty Data objektu Struktura nejsou viditelná pro jiné objekty stejné Struktury
3 Předat podle reference a předat podle hodnoty Použití Pass by Reference Používá předávání podle hodnoty
4 Dědictví Funkce třídy mohou být zděděny svými podtřídami; umožňuje dědičnost Nikdy nedovoluje dědičnost
5 Výchozí viditelnost Všichni členové třídy jsou ve výchozím nastavení soukromé Ve výchozím stavu jsou všichni členové struktury veřejní
6 Velikost, když je prázdný Velikost prázdné třídy je 1 byte Velikost prázdné struktury je 0 bajtů
7 Sběr odpadu Protože používá průchod odkazem, je možné shromažďovat odpadky Protože používá předávání hodnoty, sběr odpadu není možný
8 Správa paměti Snadnost procesu sběru odpadu pomáhá při efektivní správě paměti Nedostatek sběru odpadu má za následek špatnou správu paměti
9 Konstruktory Umožňuje konstruktérům všech typů, například s parametry nebo bez parametrů Umožňuje pouze parametrizované konstruktéry
10 Destruktory Může to použít Nelze jej použít
11 Inicializace proměnných členů Umožňuje přímou inicializaci členských proměnných Nepovoluje přímou inicializaci slov členských proměnných
12 Vytvoření objektu Při vytváření objektu je nutné použít klíčové slovo „nové“ Při vytváření objektu je volitelné použít klíčové slovo „nové“
13 Kdy použít? Lepší pro větší a složitější objekty, kde je vyžadována dědičnost Lepší pro menší a jednodušší objekty, kde je dědičnost méně důležitá.

Téměř jsme pokryli všechny rozdíly mezi třídou a strukturou, a pokud máte pocit, že něco chybí, dejte nám prosím vědět. Pojďme se společně učit a co nejlépe využít těchto znalostí!