2010-02-11 29 views
37

Qualcuno potrebbe dirmi qual è la differenza principale tra le strutture C++ di C &.Struttura C e struttura C++

+10

C non possono contenere metodi che strutture C++ possono :) – vpram86

+0

strutture C sono fondamentalmente utilizzati per raggruppare i dati. – Ashish

+2

Strutture C++ supportano l'ereditarietà. :) –

risposta

60

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à.

+4

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). –

9

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)

+9

In base al mio CS prof, un'altra differenza tra le strutture e le classi è "non si può fallire una struttura" –

1

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 .

2

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.

+0

Invece di menzionare i vtables (che non sono nella specifica del linguaggio C++) dovresti menzionare i metodi 'virtuali'. –

+0

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). –

+0

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. –

3

C: non è possibile definire la funzione all'interno della struttura in c.

C++: Possiamo definire la funzione all'interno della struttura in C++.

1

Ci sono diverse differenze nella struttura C e C++

  1. In C definiamo struct parola è necessario creare il valore tipo di struttura, mentre in C++ non è necessario.

  2. 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++)

  3. 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.

  4. La struttura in C non può avere membri statici mentre nella struttura C++ può avere membri statici.

  5. La dimensione della struttura vuota è la violazione del vincolo in C, ma è sempre 1 in C++.

  6. 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

+0

Puoi spiegare il punto 1? Ho capito cosa intendevi qui. – user3728501

+0

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; –

+0

Ah ok si capisco volevi dire, devi scrivere struct anche per dichiarare nuove variabili – user3728501