Třída a struktura

Anonim

Než porozumíme rozdílu mezi třídou a strukturou, měli bychom znát několik základních pojmů spojených s nimi. Bez pochopení konceptů je obtížné pochopit rozdíly mezi těmito dvěma koncepty.

Co je to třída a objekt:

Jedná se o dva důležité pojmy související s programováním orientovaným na objekt a tvoří základ pro vytváření funkcí a předávání dat jiným funkcím. Pro lepší porozumění je můžeme propojit s příkladem reálného života. Třída může být považována za obchod a předmětem může být některý z jednotlivých, specifický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í konstrukce, osvětlení apod. Prostřednictvím objektů můžeme skutečně využít třídu; tvoří instanci třídy.

Syntaxe třídy

Obchodní dům {

veřejné řetězcové věci;

veřejný návrh řetězce;

}

Syntaxe objektu

Obchod s potravinami = nový obchod ();

Ukládání kancelářských potřeb = nový obchod ();

Co je Struct?

Struct obsahuje pouze data, a proto je užitečné při vytváření požadavků na jednotlivé údaje prostřednictvím objektů Struct. Na rozdíl od třídy chybí funkce. Zde je jeho syntaxe:

struct grocery_entrance {

char název_stupu [50];

int entrance_size;

} grocery_entrance;

Všechny obchody mohou používat Struct 'entrance' s jednotlivými názvy a velikostem.

Co je dědictví?

Je to podobné tomu, jak syn dědí majetky svého otce, a syn mu může přidávat i jiné vlastní věci. Třída může být buď základní třída, nebo odvozená třída, v níž může být první považována za základnu, která ji tvoří. Odvozená třída přidává pro sebe sama o sobě málo dalších vlastností, kromě toho, co získá od základní třídy. Když vezmeme v úvahu výše uvedený příklad, obchod s potravinami může být stále odvozen do určité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ší?

  • Opakovatelnost: Jelikož třídy tvoří základní rámec, mohou být znovu použity; Strukturované jsou však jednotlivé prvky se specifickými vlastnostmi, takže nemohou být znovu použity. Třída obchodu s potravinami může být například použita pro jakýkoli typ obchodu s potravinami, ale Struct grocery_entrance je specifická pouze pro tento obchod a nemá smysl znovu použít ho v jiných třídách.
  • Viditelnost: Veškeré funkce třídy jsou veřejně přístupné jeho objektem. Máme například funkci nazvanou 'věci' v třídě 'store'. Funkce "věci" je viditelná pro všechny její objekty, jako jsou například obchody s potravinami, papírenský obchod apod. Taková viditelnost není možná s Structs, protože strukturální data jsou omezena na sebe a nejsou viditelné pro jiné struktury. Aby bylo jasné, můžeme říci, že údaje o "nákupu zboží" nejsou veřejně viditelné pro všechny ostatní prodejny.
  • Procházet referencí a projít hodnotou: Funkce Pass by Reference odesílá do funkcí pouze paměťové místo a nikoli skutečná data. To znamená, že kdykoli se hodnota změní, změna se odráží v odpovídajících funkcích. Hodnota prochází hodnotou, která zase posílá hodnotu do funkce. V takovém případě se změna hodnoty po odeslání nezobrazí ve funkci. Třídy používají průchod a Struct používá průchozí hodnotu.
  • Dědictví: Třídy mohou být dále zděděny a vytvářejí podtřídy, ale Structs nemůže využívat dědičnost. Třída Store například poskytuje své funkce podskupině obchodu s potravinami. Ale Struct 'grocery_entrance' nemůže dě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é Structu jsou ve výchozím stavu vedeni jako veřejné subjekty.
  • Velikost prázdné třídy a Struct: Třída používá velikost 1 bajtu, i když je prázdná, zatímco Struct nikdy nevyužívá žádnou paměť, když je prázdná. To znamená, že můžeme říci, že velikost prázdné struktury se rovná 0 bajtů.
  • Sbírka odpadků: Odběr odpadků je možný u Třídy, protože používají průchod odkazem. Proto je snadnější provádět čištění na jednom místě, kde jsou data uložena. Na druhou stranu, s Structem není možné shromažďovat odpadky, jelikož používá průchod hodnoty a data jsou rozptýlena na různých místech.
  • Správa paměti: Vzhledem k tomu, že třída umožňuje sběr odpadků, správa paměti je také účinná; nicméně není s Structs efektivní.
  • Konstruktor: Konstruktor obecně inicializuje třídu s určitými určenými hodnotami. Můžeme se na ni podívat jako na něco, co bylo inicializováno hodnotami. Pokud má být vytvořena nová třída, konstruktor je volán k přidělení paměti pro danou instanci. Dokonce můžeme předat hodnoty jako argumenty při volání konstruktoru. Pojďme nyní k naší aktuální diskusi.Třídy umožňují konstruktorům všech typů, například s argumenty nebo bez argumentů, zatímco struktury umožňují konstruktorům pouze argumenty, tj. Parametrizované konstruktory.
  • Destruktor: Dekteriér se nazývá vždy, když potřebujeme odstranit instanci třídy. Dekteriér naopak odstraní tuto instanci a uvolní paměť. Třída může použít destruktor, zatímco Struct nemůže.
  • Proměnné členů Inicializace: V třídách můžeme inicializovat členské proměnné přímo; taková inicializace není možná u Structs.
  • Vytvoření objektu: Obecná syntaxe pro vytváření objektů ve třídách je:

Demo obj = nová Demo ();

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

Demo obj;

Pracuje dokonale bez klíčového slova "nové".

Kdy používat třídu a kdy použít Struct?

Vzhledem k tomu, že třídy jsou flexibilnější při předávání dat a funkcí společně, můžeme jít, když jsou použité objekty složité a velké. V našem příkladu může Mall používat třídu 'store' k lepšímu vyjádření systému. Struktury jsou však omezeny na menší předměty, protože jsou poměrně méně účinné než třídy. Pokud tedy navrhneme svůj vlastní obchod, Structs jsou lepší volbou.

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

Možná jste slyšeli termíny "box" a "unboxing", abyste převedli Struct na třídu a naopak. Přestože jsou to efektivní procesy, které nám pomohou při konverzi, je třeba s nimi zacházet opatrně. Vzhledem k tomu, že to má přímý vliv na paměťová místa, má velký vliv na výkonnost našeho systému. Navíc ovlivňuje procesy sběru odpadu a vede k celkové neefektivitě systému. Proto použijte tyto konverze pouze v případě potřeby.

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

S.No Koncepty Rozdíly
Třída Struct
1 Re-použitelnost Úplně znovu použitelný Není opět použitelný
2 Viditelnost Všechny funkce třídy jsou viditelné pro její objekty Data objektu objektu Struct nejsou viditelná pro jiné objekty stejného Struct
3 Projděte podle odkazu a projděte podle hodnoty Používá průchod podle odkazu Používá průchod podle hodnoty
4 Dědictví Funkce třídy mohou být děděny jejími podtřídami; umožňuje dědictví Nikdy neumožňuje dědictví
5 Výchozí viditelnost Všichni členové třídy jsou ve výchozím nastavení soukromí Všichni členové struktu jsou ve výchozím nastavení veřejní
6 Velikost při vyprázdnění Velikost prázdné třídy je 1 bajt Velikost prázdné Struct je 0 bajtů
7 Sbírka odpadků Při použití odkazu prochází odkazem na sběr odpadků Protože používá průchod podle hodnoty, není možné sběr odpadků
8 Správa paměti Jednoduchost procesu sběru odpadků pomáhá při efektivní správě paměti Nedostatek sběru odpadků vede k špatnému řízení paměti
9 Konstruktory Umožňuje konstruktéři všech typů, například s parametry nebo bez nich Umožňuje pouze parametrizované konstruktory
10 Destruktory Může jej použít Nelze ji použít
11 Inicializace proměnných členů Umožňuje přímou inicializaci proměnných členů Neumožňuje inicializaci přímých slov pro členské proměnné
12 Vytvoření objektu Při vytváření objektů je nutné používat klíčové slovo "nové" Při vytváření objektu je volitelně použít klíčové slovo "nové"
13 Kdy používat? Lepší pro větší a složitější objekty, kde je vyžadováno dědictví Lepší pro menší a jednodušší objekty, kde je dědičnost méně důležitá.

Máme téměř 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. Učme se společně a využijte co nejvíce těchto znalostí!