Pourquoi les objets de la même classe ont-ils accès aux données privées les uns des autres?
class TrivialClass {
public:
TrivialClass(const std::string& data) :
mData(data) {};
const std::string& getData(const TrivialClass& rhs) const {
return rhs.mData;
};
private:
std::string mData;
};
int main() {
TrivialClass a("fish");
TrivialClass b("heads");
std::cout << "b via a = " << a.getData(b) << std::endl;
return 0;
}
Ce code fonctionne. Il est parfaitement possible que l’objet a accède aux données privées de l’objet b et les renvoie. Pourquoi devrait-il en être ainsi? Je penserais que les données privées sont privées. (J'ai commencé par essayer de comprendre les constructeurs de copie dans l'idiome pimpl, mais j'ai ensuite découvert que je n'avais même pas compris cette situation simple.)