Qualcuno potrebbe dirmi qual è la differenza principale tra le strutture C++ di C &.Struttura C e struttura C++
risposta
In C++ struct
e class
sono la stessa identica cosa, ad eccezione di quella di default struttura per public
di visibilità e di classe default private
visiblity.
In C, i nomi struct sono nel loro proprio spazio dei nomi, quindi se avete struct Foo {};
, è necessario scrivere struct Foo foo;
per creare una variabile di quel tipo, mentre in C++ è possibile scrivere solo Foo foo;
, anche se è consentito anche lo stile C . I programmatori C di solito usano typedef struct {} Foo;
per consentire la sintassi C++ per le definizioni di variabili.
Il linguaggio di programmazione C non supporta inoltre restrizioni di visibilità, funzioni membro o ereditarietà.
In C++ i nomi delle strutture sono anche nel loro spazio nome. La differenza è che durante la ricerca di un identificatore il compilatore cercherà prima nello spazio dei nomi generale, e se non trovato controllerà anche lo spazio dei nomi delle classi definite dall'utente. In C++ il suo è corretto: 'struct x {}; void x() {} 'mentre questo non è' typedef struct x {} x; void x() {} ', poiché lo spazio identificatore globale ha già un' x' (typedef) la dichiarazione della funzione si scontrerà (nel primo esempio, per creare una variabile è necessario scrivere 'struct x var' in modo che l'identificatore venga cercato solo come un tipo definito dall'utente). –
In C++, le strutture si comportano come le classi, permettendo metodi, costruttori, distruttori ecc ...
La differenza principale tra le classi e le strutture C++ è che tutto all'interno di strutture è pubblico per impostazione predefinita, mentre tutto dentro le classi è privato per impostazione predefinita. (Es: nulla fuori potervi accedere direttamente)
In base al mio CS prof, un'altra differenza tra le strutture e le classi è "non si può fallire una struttura" –
C struct è più simile ad una definizione di una struttura dati composita
C++ struct può essere pensato come una classe ma portata di tutte le variabili membro sono stabilizzati allo pubblico .
In aggiunta alle risposte precedenti, ricordare che le strutture C++ supportano l'ereditarietà e quindi possono contenere puntatori ai vtables. Questo può fare una grande differenza durante la serializzazione e la deserializzazione di queste strutture attraverso i processi. Anche i modelli sono supportati.
Invece di menzionare i vtables (che non sono nella specifica del linguaggio C++) dovresti menzionare i metodi 'virtuali'. –
Il processo migliore per la serializzazione e la deserializzazione delle strutture consiste nell'avere funzionalità che accedano ai campi dati (membri) singolarmente. Si applica a entrambi i linguaggi C e C++. Un motivo principale è che al compilatore è consentito aggiungere padding tra i membri (vale per entrambe le lingue). –
In C, il riempimento è solo questione di pochi byte inutilizzati quando i dati sono serializzati e deserializzati nella sua rappresentazione binaria. Con C++, può creare problemi quando si usano oggetti di classi con funzioni virtuali. –
C: non è possibile definire la funzione all'interno della struttura in c.
C++: Possiamo definire la funzione all'interno della struttura in C++.
Ci sono diverse differenze nella struttura C e C++
In C definiamo struct parola è necessario creare il valore tipo di struttura, mentre in C++ non è necessario.
In C esiste alcuna funzione all'interno della struttura, mentre in C++ possiamo definire funzione che può accedere ai membri di dati di struttura direttamente (funzione è nomi come metodo in C++)
esiste il concetto di accesso modificatore all'interno della struttura in C mentre in C++ possiamo trovare il modificatore di accesso (ad esempio privato e pubblico). Di default sono tutti pubblici.
La struttura in C non può avere membri statici mentre nella struttura C++ può avere membri statici.
La dimensione della struttura vuota è la violazione del vincolo in C, ma è sempre 1 in C++.
Possiamo avere sia puntatori che riferimenti a struct in C++, ma sono consentiti solo i puntatori alle strutture.(I riferimenti non sono caratteristica del linguaggio C) strutture
Puoi spiegare il punto 1? Ho capito cosa intendevi qui. – user3728501
In C dobbiamo scrivere struct keyword quando dichiariamo una variabile del tipo di struttura. Esempio: Struct ABC var1, var2; Mentre C++ si avvicina per minimizzare il divario tra il tipo di dati derivati e il tipo di dati integrato. Così come definiamo int o char, qui possiamo dichiarare la variabile di struttura direttamente come: Esempio: ABC var1, var2; –
Ah ok si capisco volevi dire, devi scrivere struct anche per dichiarare nuove variabili – user3728501
- 1. Struttura vuota in C e struttura vuota in C++
- 2. struttura vuota in C
- 3. sintassi struttura C
- 4. Struttura statica in C++
- 5. Struttura locale in c
- 6. Marshalling di struttura C in C#
- 7. fread() una struttura in c
- 8. C++ come eliminare una struttura?
- 9. C++ 11 corretta inizializzazione Struttura
- 10. Estrarre i campi di una struttura C
- 11. Quando verrà liberata memoria C della struttura
- 12. Struttura di directory per una libreria C++
- 13. l'inizializzazione diretta di una struttura in C
- 14. consulenza sulla struttura dati su C++
- 15. C# IEnumerator/struttura di rendimento potenzialmente negativa?
- 16. Array di lunghezza variabile C++ nella struttura
- 17. hsc2hs: Mutate una struttura C con Haskell
- 18. come definire una struttura come in C
- 19. C++: la struttura verrà copiata correttamente?
- 20. C# array all'interno di una struttura
- 21. Che cos'è una struttura "compressa" in C?
- 22. Come restituire una struttura anonima in C?
- 23. Velocità di dereferenziamento puntatore di struttura C
- 24. C# - Struttura ad albero intrusiva, utilizzando CRTP
- 25. Struttura di cartelle per un progetto C
- 26. Struttura C con puntatore a auto
- 27. Posso distruggere una struttura in C++?
- 28. Casting una struttura C in un altro
- 29. Converti struttura da C a Delphi
- 30. struttura non nomina un tipo in C++
C non possono contenere metodi che strutture C++ possono :) – vpram86
strutture C sono fondamentalmente utilizzati per raggruppare i dati. – Ashish
Strutture C++ supportano l'ereditarietà. :) –