Pourquoi ne puis-je exposer les membres privés quand je retourner une référence à partir d'une fonction membre public?

Dans l'extrait de code, je suis en mesure d'accéder à la variable membre privée en dehors de la portée de classe. Bien que cela ne devrait jamais être fait, pourquoi est-il permis dans ce cas? Est-ce une mauvaise pratique de recevoir en retour une variable privée par référence ?

#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;
}

Et au sujet de cette méthode, quel est le type de retour de transmettre ? Et aussi quand je dois le type de retour de ce genre ?

int& methodTwo() { return x; }

PS: je suis désolé si la ligne de sujet est vague. Quelqu'un peut-il modifier le contenu pertinent ici. Merci.

OriginalL'auteur Mahesh | 2011-01-16