Nello snippet di codice, sono in grado di accedere alla variabile membro privata al di fuori dell'ambito della classe. Anche se questo non dovrebbe mai essere fatto, perché è permesso in questo caso? È una cattiva pratica ricevere una variabile privata restituita per riferimento?Perché è possibile esporre membri privati quando restituisco un riferimento da una funzione membro pubblico?
#include <iostream>
#include <cstdlib>
class foo
{
int x;
public:
foo(int a):x(a){}
int methodOne() { return x; }
int& methodTwo() { return x; }
};
int main()
{
foo obj(10);
int& x = obj.methodTwo();
x = 20; // With this statement, modifying the state of obj::x
std::cout << obj.methodOne();
getchar();
return 0;
}
E per quanto riguarda questo metodo, cosa comunica il tipo di reso? E anche quando dovrei avere un tipo di ritorno di questo tipo?
int& methodTwo() { return x; }
PS: Mi dispiace se l'oggetto è vago. Qualcuno può cambiarlo con il contenuto rilevante qui. Grazie.
Per le persone che passano: [questa domanda] (http://stackoverflow.com/questions/8005514/is-returning-references-of-member-variables-bad-pratice) suggerisce che può essere pericoloso restituire un riferimento al membri della classe. – Arthur
@Arthur: Sì, come ho detto, dipende da cosa vuoi fare. Funziona bene per 'std :: vector' - ma ci sono molti casi in cui è anche la cosa sbagliata. –