Diferența dintre clasă și structură

Înainte de a înțelege diferența dintre Clasă și Struct, ar trebui să știm câteva concepte de bază asociate cu ele. Fără înțelegerea conceptelor, este dificil să se înțeleagă diferențele dintre cele două.

Ce este clasa și obiectul:

Acestea sunt cele două concepte importante legate de programarea orientată pe obiecte și ele constituie baza pentru încadrarea funcțiilor și trecerea datelor către alte funcții. Pentru o mai bună înțelegere, putem să o corelăm cu un exemplu din viața reală. O clasă poate fi considerată ca un magazin, iar un obiect poate fi oricare dintre magazinele individuale, specifice, cum ar fi bacanie, papetărie, fructe etc. Toate obiectele împărtășesc proprietățile comune ale clasei principale - magazinul - și, la rândul său, obiectele pot avea propriile lor proprietăți exclusive, cum ar fi un design specific, iluminat etc. Prin obiecte, putem folosi de fapt clasa; acestea formează instanțele unei clase.

Sintaxa unei clase

Clasă Store

lucruri publice de coarde;

proiectarea șirului public;

Sintaxa unui obiect

Magazin alimentar = magazin nou ();

Stocați papetărie = magazin nou ();

Ce este un Struct?

Un Struct include doar datele și, prin urmare, este util în încadrarea cerințelor individuale de date prin obiectele Struct. Spre deosebire de o clasă, îi lipsesc funcții. Aici este sintaxa sa:

struct grocery_entrance

numele de intrare [50];

int entrance_size;

grocery_entrance;

Toate magazinele pot folosi intrarea Struct cu nume și dimensiuni individuale.

Ce este moștenirea?

Este similar cu modul în care un fiu moștenește posesiunile tatălui său și, la rândul său, fiul poate adăuga și alte proprietăți. Clasa poate fi fie o clasă de bază, fie o clasă derivată, în care prima poate fi considerată ca bază pentru a forma aceasta din urmă. Clasa derivată adaugă câteva alte proprietăți în afară de ceea ce primește de la clasa de bază. Când luăm în considerare exemplul de mai sus, magazinul alimentar poate fi în continuare derivat de la un magazin alimentar specific, cum ar fi magazin alimentar XYZ.

Acum, că suntem familiarizați cu conceptele de bază, putem intra în diferența reală dintre Clasă și Struct.

Cum diferă acestea?

  • Re-uzabilitate: Pe măsură ce clasele formează cadrul de bază, ele pot fi reutilizate; Structurile sunt totuși elemente individuale cu proprietăți specifice, astfel încât nu pot fi reutilizate. De exemplu, clasa magazin alimentar poate fi utilizată pentru orice tip de magazin alimentar, dar Struct grocery_entrance este specifică doar pentru asta și nu are nici un rost să îl folosiți din nou în alte clase.
  • Vizibilitate: Toate funcțiile dintr-o clasă sunt disponibile public pentru Obiectele sale. De exemplu, avem o funcție denumită "lucruri" în clasa "magazin". Funcția "lucruri" este vizibilă pentru toate obiectele sale, cum ar fi "magazin alimentar", magazin de papetărie etc. O astfel de vizibilitate nu este posibilă cu structurile deoarece datele structurilor sunt limitate la sine și nu sunt vizibile altor structuri. Pentru a face lucrurile clare, putem spune că datele despre "grocery_entrance" nu sunt vizibile în mod public pentru toate celelalte magazine.
  • Treceți prin referință și treceți după valoare: Pass by Reference trimite numai funcțiile de memorie și nu datele efective. Aceasta înseamnă că ori de câte ori se modifică valoarea, schimbarea se reflectă în funcțiile corespunzătoare. Treceți prin valoare, la rândul său, trimite doar valoarea la funcție. În acest caz, o modificare a valorii după trimitere nu va fi reflectată în funcție. Utilizările de clasă trec prin referință, iar Struct utilizează valoarea de trecere.
  • Moştenire: Clasele pot fi în continuare moștenite pentru a forma subclase, dar Structs nu poate folosi moștenirea. De exemplu, clasa Store își dă funcțiile în sub-clasa "magazin alimentar". Dar structura "grocery_entrance" nu poate moșteni nici o funcție. Putem spune că nu există niciun concept ca substructura aici.
  • Vizibilitatea implicită: Toți membrii unei clase sunt păstrate în mod implicit ca entități private, în timp ce membrii unui Struct sunt păstrați în mod implicit ca entități publice.
  • Dimensiunea unei clase goale și Struct: Clasa utilizează o dimensiune de 1 octet chiar și atunci când este goală, în timp ce Struct nu folosește nicio memorie atunci când este goală. Aceasta înseamnă că putem spune că dimensiunea unui struct gol este egală cu 0 octeți.
  • Colectarea gunoiului: Colectarea de gunoi este posibilă cu clasele, pe măsură ce acestea trec prin referință. Prin urmare, este mai ușor să efectuați curățarea într-o locație unde datele sunt stocate. Pe de altă parte, colectarea de gunoi nu este posibilă cu Struct, deoarece folosește valoare de trecere și datele sunt împrăștiate în diferite locații.
  • Gestionarea memoriei: Deoarece Clasa permite colectarea gunoiului, managementul memoriei este de asemenea eficient; cu toate acestea, nu este atât de eficient cu Structs.
  • Constructor: Un constructor în general inițializează clasa cu anumite valori specificate. Ne putem uita la ea ca la ceva care a fost inițializat cu valori. Dacă trebuie creată o nouă clasă, constructorul este chemat să aloce memoria pentru acea instanță. Putem trece chiar și valori ca argumente în timp ce sunăm un constructor. Să vină acum la discuția noastră reală. Clasele permit constructorilor de toate tipurile, cum ar fi cu sau fără argumente, în timp ce structurile permit numai constructorilor cu argumente, adică constructorii parametrizați.
  • Destructor: Un destructor se numește ori de câte ori trebuie să ștergem o instanță a unei clase. Distructorul, la rândul său, șterge acea instanță și eliberează memoria. O clasă poate folosi un destructor, în timp ce un Struct nu poate.
  • Inițializare variabile de membru: În clase, putem inițializa variabilele membre direct; o astfel de inițializare nu este posibilă cu Structs.
  • Crearea obiectelor: Sintaxa generală pentru crearea de obiecte în clase este:

Demo obj = nou Demo ();

Aceasta înseamnă că trebuie să folosim cuvântul cheie "nou" în timp ce creați obiecte dintr-o clasă. Acest lucru nu este necesar atunci când creați obiecte din structuri. Doar aruncați o privire la sintaxa lor:

Demo obj;

Funcționează perfect chiar și fără cuvântul cheie "nou".

Când să folosiți clasa și când să folosiți Struct?

Pe măsură ce clasele sunt mai flexibile în transmiterea datelor și a funcțiilor împreună, putem merge pentru ele atunci când obiectele folosite sunt complexe și mari. În exemplul nostru, un Mall poate folosi clasa "magazin" pentru a exprima sistemul într-o manieră mai bună. Structurile sunt, totuși, limitate la obiecte mai mici, deoarece sunt relativ mai puțin eficiente decât clasele. Prin urmare, dacă proiectați un magazin propriu, structurile sunt alegerea cea mai bună.

Cum se convertește o structură la o clasă și vice versa?

S-ar putea să fi auzit termenii "box" și "unboxing" pentru a converti un Struct într-o clasă și invers. Deși acestea sunt procese eficiente pentru a ne ajuta în transformare, ele ar trebui tratate cu prudență. Deoarece acest lucru afectează în mod direct locațiile de memorie, există un impact enorm asupra performanței sistemului nostru. Mai mult, afectează procesele de colectare a gunoiului și are ca rezultat ineficiența generală a sistemului. Prin urmare, utilizați aceste conversii numai atunci când este necesar.

Să ne uităm la diferențele menționate mai sus în formă tabelară.

S.No concepte diferenţe
Clasă struct
1 Re-uzabilitate Complet reutilizabil Nu este reutilizabil
2 Vizibilitate Toate funcțiile unei clase sunt vizibile obiectelor sale Datele unui Obiect al unui Struct nu sunt vizibile altor obiecte ale aceluiași Struct
3 Treceți prin referință și treceți prin valoare Utilizează Pass by Reference Folosește Pass by Value
4 Moştenire Funcțiile unei clase pot fi moștenite de subclasele sale; permite moștenirea Nu permite niciodată moștenirea
5 Vizibilitatea implicită Toți membrii unei clase sunt privați în mod implicit Toți membrii unui Struct sunt public implicit
6 Dimensiune atunci când este gol Dimensiunea unei clase goale este de 1 octet Dimensiunea structurii goale este 0 octeți
7 Colecția de gunoi Așa cum se utilizează trece prin referință, colectarea gunoiului este posibilă Pe măsură ce folosește trec prin valoare, colectarea gunoiului nu este posibilă
8 Gestionarea memoriei Ușurința procesului de colectare a gunoiului contribuie la gestionarea eficientă a memoriei Lipsa de colectare a gunoiului duce la o gestionare slabă a memoriei
9 constructorilor Permite constructorilor de toate tipurile, cum ar fi cu sau fără parametri Permite numai constructorii parametrizați
10 destructori Poate să o folosească Nu o pot folosi
11 Inițializarea variabilelor de membru Permite inițializarea directă a variabilelor membre Nu permite inițializarea directă a cuvintelor pentru variabilele membre
12 Crearea obiectelor Este necesar să utilizați cuvântul cheie "nou" în timpul creării de obiecte Este opțional să utilizați cuvântul cheie "nou" în timpul creării de obiecte
13 Când să utilizați? Mai bine pentru obiectele mai mari și complexe, unde este necesară moștenirea Mai bine pentru obiectele mai mici și mai simple, unde moștenirea este mai puțin importantă.

Am acoperit aproape toate diferențele dintre Clasă și Struct și dacă simțiți că ceva lipsește, vă rugăm să ne anunțați. Să învățăm împreună și să profităm la maximum de aceste cunoștințe!