Domanda

Ho sentito dire che in C ++, utilizzando una funzione di accesso (get...()) in una funzione membro della stessa classe in cui la funzione di accesso è stata definita è una buona pratica di programmazione? E 'vero e dovrebbe essere fatto?

Ad esempio, è preferito questo:

void display() {
    cout << getData();
}

per qualcosa di simile:

void display() {
    cout << data;
}

data è un membro di dati della stessa classe in cui è stata definita la funzione di accesso ... stessa cosa con il metodo display().

Sto pensando alla testa per farlo, soprattutto se avete bisogno di richiamare i lotti accessor di volte all'interno della stessa classe, piuttosto che semplicemente usando direttamente il membro di dati.

È stato utile?

Soluzione

La ragione di questo è che se si cambia l'attuazione di getData(), non sarà necessario cambiare il resto del codice che accede direttamente data.

E inoltre, un compilatore smart inline in ogni modo (sarebbe sempre sapere l'attuazione all'interno della classe), quindi non c'è nessuna penalità prestazioni.

Altri suggerimenti

Dipende. Utilizzando una funzione di accesso fornisce un livello di astrazione, che potrebbe rendere le future modifiche al meno doloroso 'data'. Ad esempio, se si vuole calcolare pigramente il valore di 'dati', si potrebbe nascondere che il calcolo della funzione di accesso.

Per quanto riguarda le spese generali - Se lei si riferisce al sovraccarico delle prestazioni, sarà probabilmente insignificante - le vostre funzioni di accesso sarà quasi certamente essere inline. Se lei si riferisce a spese generali di codifica, allora sì, si tratta di un compromesso, e si dovrà decidere se vale la pena lo sforzo supplementare per fornire funzioni di accesso.

Personalmente, non credo che i metodi di accesso valgono in molti casi.

Sì, penso che dovrebbe essere fatto più o meno incondizionatamente. Se la variabile di stato è in qualche classe di base dovrebbe essere più o meno sempre privato. Se permettete di essere protetto o pubblico, tutti ereditato utilizzarlo direttamente. Queste classi, a loro volta potrebbero essere le classi tuoi colleghi hanno scritto in qualche altro progetto. Se improvvisamente decide di prendere in giro circa nella classe base e refactoring per esempio il nome della variabile a qualcosa di più adatto, tutti gli utenti di tale Stato devono essere riscritti.

Questo probabilmente non è un problema se si è l'unico programmatore o lo sviluppo di un codice che nessuno mai userà. Ma non appena il numero di classi secondarie iniziano a crescere, potrebbe diventare davvero pelose. Devo trasparenza amore!

Comunque, io non sono dèi migliore bambino su questo pianeta. A volte io baro;) Quando sei nella classe di appartenenza, penso che sia ok per accedere direttamente ai dati privati. Potrebbe anche essere utile, poiché si sa automaticamente che si sta modificando la classe attuale si è in. Dato che avete un qualche tipo di convenzione di denominazione che in realtà ti dice così, ad esempio, qualche nome di variabile con un carattere di sottolineatura alla fine: "someVariable _"

.

Cheers!

Bene, signor Khunt, l'overhead è veramente insignificanti per i metodi di accesso nella maggior parte dei casi. La questione è se non la logica di accesso deve essere invocato, o avete bisogno di un accesso diretto al campo. Questa è una domanda per ogni singola applicazione, ma in molti casi, non farà molta differenza.

La vera ragione di funzioni di accesso è quello di fornire l'incapsulamento dei campi alle altre classi - e meno sulla classe contenente

.

Personalmente, preferisco non avere decine di funzioni aggiuntive (ottenere e impostare per ogni variabile membro). Vorrei solo usare Dati , e avrebbe cambiato per getData () solo quando necessario per fare qualcosa di diverso. Dal momento che stiamo parlando di cambiare il codice solo in una classe, non dovrebbe essere troppo difficile.

Dipende da quello che si potrebbe in ultima analisi, che fare con il membro di dati suppongo.

avvolgendolo in funzione di accesso è quindi possibile fare cose come il recupero pigramente i dati se questo è stato un processo costoso e non qualcosa che si vuole fare a meno che qualcuno chiede. D'altra parte si potrebbe sapere che sarà sempre un tipo built-in muta e quindi non riesco a vedere alcun vantaggio di passare attraverso una funzione di accesso lì. Come ho detto, dipende dal membro.

A mio avviso, l'aspetto più importante della questione è vuol rendere il codice più leggibile e quindi gestibile? Personalmente non credo che lo fa non avrebbe fatto questo.
Certo, non si dovrebbe mai aggiungere un accesso privato solo per fare questo, che sarebbe cnuts.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top