En el fragmento de código, puedo acceder a la variable miembro privada fuera del alcance de la clase. Aunque esto nunca debería hacerse, ¿por qué está permitido en este caso? ¿Es una mala práctica recibir una variable privada devuelta por referencia?¿Por qué puedo exponer a miembros privados cuando devuelvo una referencia de una función de miembro público?
#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;
}
Y respecto a este método, ¿qué transmite el tipo de retorno? Y también, ¿cuándo debería tener un tipo de devolución de este tipo?
int& methodTwo() { return x; }
PS: Lo siento si la línea de asunto es vago. ¿Alguien puede cambiarlo al contenido relevante aquí? Gracias.
Para las personas que pasan por: [esta pregunta] (http://stackoverflow.com/questions/8005514/is-release-references-of-member-variables-bad-pratice) sugiere que puede ser peligroso devolver una referencia a su miembros de la clase. – Arthur
@Arthur: Sí, como dije, depende de lo que quiera hacer. Funciona muy bien para 'std :: vector', pero hay muchos casos en los que es incorrecto hacerlo también. –