Per tipi di dati semplici in classi completamente visibili ai client della classe, non c'è alcuna differenza reale in quanto è necessario ricompilare il client ogni volta che la definizione della classe cambia.
Il motivo principale per creare una funzione di accesso anziché utilizzare direttamente il membro è consentire l'implementazione per rimuovere successivamente il membro dati e mantenere l'interfaccia compatibile; se l'interfaccia che contiene l'accessor è invariata, il risultato è tipicamente compatibile binario, altrimenti è compatibile con la fonte. Avere l'accessorio in linea significa definirlo come parte dell'interfaccia che stai modificando, in modo da poter essere sempre compatibile con la fonte.
L'altro motivo per avere un accessor è un limite DLL: se l'accessor deve chiamare in un'altra funzione e si consente che sia in linea, il simbolo di questa funzione deve essere esportato anche nel client.
A seconda della complessità del progetto, può essere utile definire un'interfaccia per il codice come una classe astratta, che consente di modificare l'implementazione a proprio piacimento senza che il cliente abbia mai visto la modifica; in questo caso, gli accessor sono definiti come astratti nella classe di interfaccia e i client non possono in linea, mai.
fonte
2011-12-19 07:45:23
Penso che questo potrebbe probabilmente essere esteso a "dovrebbero essere allineate funzioni ragionevolmente brevi?". –
Ti manca un 'const', btw. –
Si noti che è possibile definire la funzione come inline, sempre nel file di intestazione, ma al di fuori del corpo della classe. Ciò a volte risulta in un'interfaccia più leggibile. Nel tuo caso, manterrai la dichiarazione della classe come "fuori linea", ma dovrai spostare la definizione della funzione nel file di intestazione, con 'inline' prima di essa. –