2009-04-27 3 views
18

In C++ a volte nella definizione della classe i membri pubblici sono dichiarati all'inizio e privati ​​in seguito. Ma le variabili oi membri dei dati sono normalmente privati ​​e utilizzati dai metodi pubblici. Quindi, in questo caso le variabili vengono utilizzate ma non ancora dichiarate. Quindi il codice diventa difficile da capire. Ma ho trovato rinomati programmatori, siti o libri per dichiarare i membri privati ​​in seguito. Qualcuno sa qual è la ragione?Perché definire membri privati ​​sotto membri pubblici in C++?

+2

Duplicato: http://stackoverflow.com/questions/308581/how-should-i-order-the-members-of-ac-class –

+1

Anche: http://stackoverflow.com/questions/778281/why -put-private-fields-and-methods-at-the-top-of-class –

risposta

27

Faccio le cose da qualche parte perché gli utenti della mia classe non si preoccupano dei membri privati, sono interessati all'API pubblica (ad esempio, come usare la mia classe).

Inoltre, nei file di intestazione generalmente sto solo dichiarando le funzioni membro, piuttosto che definirle, quindi non accedo comunque ad alcun membro privato.

+2

+1: il file di intestazione dovrebbe fungere da contratto per gli utenti della classe. Nessuna implementazione appartiene a questo. – kgiannakakis

+3

Tranne, ovviamente, funzioni inline. Tuttavia, in tutti i casi tranne i più banali, quelli dovrebbero venire dopo la definizione della classe. – rlbond

+0

@rlbond - buon punto. –

2

Normalmente i membri privati ​​non contano. Se sto osservando una classe per determinare come usarla da qualche altra parte nel codice, non mi interessa il suo interno, quindi metti i membri privati ​​in fondo, dato che non ho bisogno di conoscerli. Se I "m modifica di una classe, allora mi prenderò il tempo per trovare i membri privati ​​e so che saranno in fondo, invece di dover scremare l'intera classe

2

Siamo come gli opposti:. My Question

Il mio ragionamento è che quando si acquisisce familiarità con una classe è più utile prima essere introdotti all'interfaccia pubblica, quindi approfondire i membri privati ​​quando è necessario. Se inizi a guardare i membri privati, non hai contesto come vengono utilizzati

5

I membri privati ​​e l'implementazione devono essere nascosti dal file di intestazione. L'inserimento delle definizioni dei membri privati ​​nella parte inferiore è un modo rapido per farlo. forse è meglio usare Pimpl idiom e nascondere la parte privata della classe in una struttura interna.

20

Abbiamo letto il testo dall'alto verso il basso, quindi le informazioni più rilevanti dovrebbero essere in alto. In una definizione di classe, questa è l'interfaccia pubblica.

0

concordato. I membri privati ​​dovrebbero essere dichiarati in fondo. L'unica buona ragione per dichiarare per primo i membri privati ​​che ho trovato è quando una funzione deve ottenere o restituire un tipo di dati personalizzato, come: vettore. Il compilatore ti chiederà che tipo di dati è quello.

Ma anche, in questo caso i preffer fare:

{ privato: /// advicing OFC theres più private qui sotto! precedenza dichiarare solo del tipo

pubblico:

privato:

};