Diferența dintre clasă și structură Diferența dintre

Anonim

Î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 formează baza pentru încadrarea funcțiilor și transmiterea 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 proprietăți exclusive, cum ar fi un design specific, iluminatul etc. Prin intermediul obiectelor, putem folosi de fapt clasa; acestea formează instanțele unei clase.

Sintaxă a unui clasă

Magazin de clasă {

lucruri publice în șir;

design de șir public;

}

Sintaxa unui obiect

Magazin alimentar = magazin nou ();

Stocare Papetărie = magazin nou ();

Ce este o structură?

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 {

char input_name [50];

int intrare_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 magazinul alimentar XYZ.

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

Cum diferă acestea?

  • Re-utilizabilitate: 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ă numai pentru asta și nu are rost să-l folosiți din nou în alte clase.
  • Vizibilitate: Toate funcțiile dintr-o clasă sunt accesibile publicului obiectelor 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.
  • Pass by Reference și Pass by Value: 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ștenirea: Clasele pot fi moștenite în continuare 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ăstrate în mod implicit ca entități publice.
  • Dimensiunea unei clase goale și Struct: utilizează o dimensiune de 1 Byte 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 gunoiului 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 utilizează valoarea de trecere și datele sunt împrăștiate în locații diferite.
  • Gestionarea memoriei: Deoarece Class permite colectarea de gunoi, 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 doar constructorilor cu argumente, i. e. constructorii parametrizați.
  • Destructor: Un destructor este apelat ori de câte ori avem nevoie pentru a șterge 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.
  • Variabilele membrilor Inițializare: În clase, putem inițializa variabilele membre direct; o astfel de inițializare nu este posibilă cu Structs.
  • Crearea obiectelor: Sintaxa generală pentru crearea obiectelor în clase este:

Demo obj = new Demo ();

Aceasta înseamnă că trebuie să folosim cuvântul cheie "nou" în timp ce creăm obiecte dintr-o clasă.Acest lucru nu este necesar atunci când creați obiecte din structuri. Luaț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, Structs sunt cea mai bună alegere.

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

Este posibil 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 în tabel.

S. No Concepte Diferențe
Clasă Struct
1 Reutilizabilitate Toate funcțiile unei clase sunt vizibile obiectelor ei Datele unui Obiect al unui Struct nu sunt vizibile pentru alte obiecte ale aceleiași Struct
3 Pass by Reference și pass by Value > Utilizări Pass by Reference Utilizări 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 privat în mod implicit Toți membrii unui Struct sunt public implicit
Dimensiunea unei clase goale este 1 octet Dimensiunea structurii goale este 0 octeți 7 Colecția de gunoi
Folosind trece prin referință, colectarea gunoiului este posibilă Utilizarea trec prin valoare, colectarea de gunoi nu este posibil 8 Managementul memoriei
Ușurința procesului de colectare a gunoiului contribuie la gestionarea eficientă a memoriei managementul memoriei 9 constructori
permite constructorilor de toate tipurile, cum ar fi cu sau fără parametri permite numai constructori parametrizați 10 distructor
utilizați 11 Variabilele de inițiere Permite inițializarea directă a variabilelor membre
Nu permite inițializarea directă a cuvintelor de variabile membre 12 < Crearea obiectelor Este nevoie să utilizați cuvântul cheie "nou" în timpul creării de obiecte Când se folosește?
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 acea cunoaștere!