Î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ă.
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 ();
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.
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.
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".
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ă.
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!