Differenza tra Classe e Struct

Prima di comprendere la differenza tra Class e Struct, dovremmo conoscere alcuni concetti di base associati a loro. Senza una comprensione dei concetti, è difficile comprendere le differenze tra i due.

Qual è la classe e l'oggetto:

Questi sono i due concetti importanti relativi alla programmazione orientata agli oggetti, e costituiscono la base per inquadrare le funzioni e i dati che passano ad altre funzioni. Per una migliore comprensione, possiamo correlarlo a un esempio di vita reale. Una classe può essere considerata come un negozio e un oggetto può essere uno qualsiasi dei singoli negozi specifici come alimentari, articoli di cancelleria, frutta, ecc. Tutti gli oggetti condividono le proprietà comuni della classe principale - il negozio - e, a loro volta, gli oggetti possono avere le loro proprietà esclusive come un design specifico, illuminazione, ecc. Attraverso gli oggetti, possiamo effettivamente usare la classe; formano le istanze di una classe.

Sintassi di una classe

Class Store

cose a corda pubblica;

progettazione di stringhe pubbliche;

Sintassi di un oggetto

Negozio di generi alimentari = nuovo negozio ();

Store Stationery = new Store ();

Cos'è una Struct?

Una Struct include solo i dati e quindi è utile per inquadrare i singoli requisiti dei dati attraverso gli oggetti Struct. A differenza di una classe, manca di funzioni. Ecco la sua sintassi:

struct grocery_entrance

char nome_ingresso [50];

int entrance_size;

drogheria;

Tutti i negozi possono utilizzare l'entrata della Struct con nomi e dimensioni individuali.

Cos'è l'ereditarietà?

È simile a come un figlio eredita le proprietà di suo padre e, a sua volta, il figlio può anche aggiungere altri suoi beni personali. La classe può essere una classe base o una classe derivata, in cui il primo può essere preso come base per formare quest'ultimo. La classe derivata aggiunge poche altre proprietà a se stessa oltre a ciò che ottiene dalla classe base. Quando consideriamo l'esempio precedente, il negozio di alimentari può ancora essere derivato da un negozio di alimentari specifico, come il negozio di alimentari XYZ.

Ora che abbiamo familiarità con i concetti di base, possiamo entrare nella differenza effettiva tra Class e Struct.

Come si differenziano??

  • Riutilizzabilità: Poiché le Classi costituiscono la struttura di base, possono essere riutilizzate; Le strutture, tuttavia, sono singoli elementi con proprietà specifiche, quindi non possono essere riutilizzati. Ad esempio, la classe del negozio di alimentari può essere utilizzata per qualsiasi tipo di negozio di alimentari, ma lo Struct grocery_entrance è specifico solo per questo e non ha senso riutilizzarlo in altre classi.
  • Visibilità: Tutte le funzioni di una classe sono disponibili pubblicamente per i suoi oggetti. Ad esempio, abbiamo una funzione denominata "cose" nella classe "archivio". La funzione 'cose' è visibile a tutti i suoi oggetti, come 'negozio di alimentari', 'negozio di cancelleria', ecc. Tale visibilità non è possibile con le strutture in quanto i dati della struttura sono limitati a se stessi e non visibili ad altre strutture. Per chiarire le cose, possiamo dire che i dati di "drogheria" non sono pubblicamente visibili a tutti gli altri negozi.
  • Passa per riferimento e passa per valore: Passa per riferimento invia solo la posizione di memoria e non i dati effettivi alle funzioni. Ciò significa che ogni volta che il valore cambia, il cambiamento si riflette nelle funzioni corrispondenti. Passa per valore, a sua volta, sta semplicemente inviando il valore alla funzione. In questo caso, una modifica del valore dopo l'invio non si rifletterà nella funzione. Gli usi di classe passano per riferimento e Struct utilizza il valore di passaggio.
  • Eredità: Le classi possono essere ulteriormente ereditate per formare sottoclassi, ma le strutture non possono utilizzare l'ereditarietà. Ad esempio, il Class Store fornisce le sue funzioni alla sottoclasse "drogheria". Ma la Struct "drogheria" non può ereditare alcuna funzione. Possiamo dire che non esiste un concetto come sotto-struct qui.
  • Visibilità predefinita: Tutti i membri di una Classe vengono mantenuti come entità private per impostazione predefinita, mentre i membri di una Struct vengono mantenuti come entità pubbliche per impostazione predefinita.
  • La dimensione di una classe e una stringa vuote: Class usa una dimensione di 1 Byte anche quando è vuota, mentre Struct non usa mai alcuna memoria quando è vuota. Ciò significa che possiamo dire che la dimensione di una struttura vuota è uguale a 0 byte.
  • Raccolta dei rifiuti: La raccolta dei dati inutili è possibile con Classi, poiché utilizzano il pass per riferimento. Pertanto, è più facile eseguire la pulizia in un luogo in cui sono memorizzati i dati. D'altra parte, la garbage collection non è possibile con Struct, dato che usa il pass by value e i dati sono sparsi in luoghi diversi.
  • Gestione della memoria: Poiché Class consente raccolte di dati inutili, anche la gestione della memoria è efficace; tuttavia, non è così efficace con Structs.
  • Costruttore: Un costruttore generalmente inizializza la classe con determinati valori specificati. Possiamo guardarlo come qualcosa che è stato inizializzato con valori. Se è necessario creare una nuova classe, il costruttore viene chiamato ad allocare memoria per quell'istanza. Possiamo anche passare valori come argomenti durante la chiamata a un costruttore. Veniamo alla nostra discussione attuale ora. Le classi consentono costruttori di tutti i tipi, come con o senza argomenti, mentre le struct permettono solo ai costruttori di argomenti, cioè i costruttori parametrizzati.
  • Distruttore: Un distruttore viene chiamato ogni volta che è necessario eliminare un'istanza di una classe. Il distruttore, a sua volta, cancella quell'istanza e libera la memoria. Una Classe può usare un distruttore, mentre una Struct non può.
  • Inizializzazione delle variabili membro: Nelle classi, possiamo inizializzare direttamente le variabili membro; tale inizializzazione non è possibile con Structs.
  • Creazione di oggetti: La sintassi generale per la creazione di oggetti nelle classi è:

Demo obj = new Demo ();

Ciò significa che dobbiamo usare la parola chiave "nuovo" durante la creazione di oggetti di una classe. Questo non è richiesto quando si creano oggetti di Structs. Dai un'occhiata alla loro sintassi:

Demo obj;

Funziona perfettamente anche senza la parola chiave "nuovo".

Quando utilizzare la classe e quando usare Struct?

Poiché le Classi sono più flessibili nel gestire dati e funzioni insieme, possiamo farcela quando gli oggetti utilizzati sono complessi e di grandi dimensioni. Nel nostro esempio, un centro commerciale può utilizzare la classe 'negozio' per esprimere il sistema in un modo migliore. Le strutture, tuttavia, sono limitate agli oggetti più piccoli, in quanto sono relativamente meno efficaci delle Classi. Pertanto, se progetti un tuo negozio, Structs è la scelta migliore.

Come convertire un Struct in una classe e Vice Versa?

Potresti aver sentito i termini "boxing" e "unboxing" per convertire un Struct in una classe e viceversa. Sebbene questi siano processi efficaci per aiutarci nella conversione, dovrebbero essere trattati con cautela. Poiché questo influenza direttamente le posizioni di memoria, c'è un enorme impatto sulle prestazioni del nostro sistema. Inoltre, influisce sui processi di raccolta dei rifiuti e genera inefficienza generale del sistema. Pertanto, utilizza queste conversioni solo quando necessario.

Vediamo le differenze sopra menzionate in forma tabellare.

S.No concetti differenze
Classe struct
1 Riutilizzabilità Completamente riutilizzabile Non riutilizzabile
2 Visibilità Tutte le funzioni di una classe sono visibili ai suoi oggetti I dati di un oggetto di una Struct non sono visibili ad altri oggetti della stessa Struct
3 Passa per riferimento e passa per valore Utilizza Pass per riferimento Utilizza Passa per valore
4 Eredità Le funzioni di una classe possono essere ereditate dalle sue sottoclassi; consente l'ereditarietà Non consente mai l'ereditarietà
5 Visibilità predefinita Tutti i membri di una classe sono privati ​​per impostazione predefinita Tutti i membri di una Struct sono pubblici per impostazione predefinita
6 Taglia quando vuoto La dimensione di una classe vuota è 1 byte La dimensione della Struct vuota è 0 byte
7 Raccolta dei rifiuti Poiché utilizza il pass per riferimento, è possibile la garbage collection Poiché utilizza il valore passato per valore, la garbage collection non è possibile
8 Gestione della memoria La facilità del processo di garbage collection aiuta nella gestione efficace della memoria La mancanza di garbage collection si traduce in una scarsa gestione della memoria
9 Costruttori Consente costruttori di tutti i tipi, come con o senza parametri Permette solo costruttori parametrizzati
10 distruttori Può usarlo Non posso usarlo
11 Inizializzazione delle variabili membro Consente l'inizializzazione diretta delle variabili membro Non consente l'inizializzazione diretta delle parole delle variabili membro
12 Creazione di oggetti È obbligatorio utilizzare la parola chiave "nuovo" durante la creazione dell'oggetto È facoltativo utilizzare la parola chiave "nuovo" durante la creazione dell'oggetto
13 Quando usare? Migliore per oggetti più grandi e complessi in cui è richiesta l'ereditarietà Migliore per oggetti più piccoli e più semplici in cui l'ereditarietà è di minore importanza.

Abbiamo quasi coperto tutte le differenze tra Class e Struct e, se ritieni che manchi qualcosa, ti preghiamo di farcelo sapere. Impariamo insieme e sfruttiamo al meglio questa conoscenza!