2009-02-12 13 views
17

Quando qualcuno dovrebbe utilizzare le strutture anziché le classi o viceversa in C++? Mi trovo a usare le strutture quando una classe in piena regola che gestisce alcune informazioni sembra eccessivo, ma vuole indicare che le informazioni contenute sono tutte correlate. Mi stavo chiedendo quali sono alcune buone linee guida per essere in grado di dire quando uno è più appropriato dell'altro?Strutturazioni e classi in C++

Edit: trovato questi collegamenti durante la lettura del materiale Stack Overflow indicato era legato dopo che la domanda è stata presentata:

When should you use a class vs a struct in C++?
What are the differences between struct and class in C++?

+0

quindi questo è un duplicato quindi – ChrisW

risposta

14

Tecnicamente, l'unica differenza tra i due è che le strutture sono pubbliche: per impostazione predefinita e le classi sono private:

Oltre a questo, non v'è alcuna differenza tecnica.

struct vs class diventa quindi una sfumatura puramente espressiva della lingua.

In genere, si evita di inserire metodi complicati in una struttura e, nella maggior parte dei casi, i membri dei dati delle strutture rimarranno pubblici. In una classe vuoi rafforzare l'incapsulamento.

struct = dati è pubblico, con molto semplici metodi di supporto

class = fortemente incapsulato, i dati vengono modificati/accessibili solo attraverso metodi

+0

Tuttavia, l'OP chiedeva linee guida, che dipendono dalla sfumatura espressiva. –

2

utilizzare una classe se si dispone di metodi, una struttura se non .

Una classe dovrebbe nascondere tutti i suoi interni solo esponendo metodi o proprietà. Una struttura tende ad esporre tutti i suoi interni e non ha metodi di accesso.

Se solo un bit di codice accede a dati (correlati), una struttura può essere perfettamente ragionevole. Dove più bit di codice devono modificare i dati o se è qualcosa di leggermente complicato, una classe sarebbe una scommessa migliore.

5

Io uso le strutture per semplici contenitori di tipi che forniscono nessun costruttori o operatori .

Classi per tutto il resto.

1

La differenza tra Classi e Strutture è che le strutture sono gruppi di variabili e le classi rappresentano oggetti. Gli oggetti hanno attributi e metodi e fanno parte di una gerarchia.

Se si utilizza C++ per sfruttare le funzionalità di OO è meglio utilizzare classi/oggetti che sono più naturali.

+0

risposta migliore che abbia mai visto "le strutture sono gruppi di variabili e le classi rappresentano oggetti" – Glolita

0

Personalmente, io uso le strutture quando ho solo bisogno di un contenitore per i dati (non funzioni membro). Altrimenti, io uso le classi.

L'unica volta che faccio un'eccezione a questa regola è se ho bisogno di un semplice functor: ad es.

struct compare { bool operator() { ... } }; 
sort(v.begin(), v.end(), compare()); 

La necessità di un'etichetta public: sarebbe solo ingombrare il codice unnecessarity.

+0

Questo è praticamente google C++ linea guida. Non che io segua/mi piacciono le loro linee guida in molti altri aspetti. –

0

le strutture in C++ sono classi con un metodo di accesso predefinito di pubblico, quindi tecnicamente diverso da quello predefinito non vi è alcuna differenza ed è possibile utilizzare entrambi in modo equivalente.

Eppure ci sono alcune aspettative e tendenze naturali, in parte perché le strutture in C++ provengono da C.

Il mio approccio: Se ha tutti i dati privati, un costruttore/distruttore, o qualsiasi funzioni membro complesse (che fanno più della semplice conversione su set/get, ecc.), usa la classe.

1

Uso sempre la classe, anche per i soli contenitori, per coerenza. È puramente una scelta di stile poiché la differenza tra i due è trascurabile.

4

Utilizzare una struttura quando si ha semplicemente bisogno di un "secchio di cose" che non ha invarianti logici che è necessario conservare. Usa una classe per qualsiasi altra cosa.

Vedere anche ciò che il C++ FAQ says on the subject.

1

Se è necessario controllare accesso ai dati, è necessario utilizzare le classi. Se non ti interessa chi sta accedendo a cosa, e cosa stanno immagazzinando lì, allora una struttura è probabilmente più appropriata.

Inoltre, una classe è più appropriata se è necessario eseguire controlli sull'integrità dei dati stessi.

+1

Ho trovato due downvotes su questa risposta, che mi sembra perfetta. Cosa dà? –

+0

Mi batte. Ho sbagliato qualcosa qui? Se mi sbaglio del tutto, mi piacerebbe davvero sapere come ... –

+0

thx. Non mi interessa davvero se è la risposta più votata; Voglio solo sapere perché è stato sbagliato ... a quanto pare 2 persone hanno pensato che fosse sbagliato. Ah bene. –