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