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++?
risposta
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.
+1: il file di intestazione dovrebbe fungere da contratto per gli utenti della classe. Nessuna implementazione appartiene a questo. – kgiannakakis
Tranne, ovviamente, funzioni inline. Tuttavia, in tutti i casi tranne i più banali, quelli dovrebbero venire dopo la definizione della classe. – rlbond
@rlbond - buon punto. –
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
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
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.
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.
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:
};
Duplicato: http://stackoverflow.com/questions/308581/how-should-i-order-the-members-of-ac-class –
Anche: http://stackoverflow.com/questions/778281/why -put-private-fields-and-methods-at-the-top-of-class –