Tại sao các đối tượng của cùng một lớp lại có quyền truy cập vào dữ liệu riêng tư của nhau?
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;
}
Mã này hoạt động. Đối tượng a hoàn toàn có thể truy cập dữ liệu riêng tư từ đối tượng b và trả về. Tại sao điều này nên được như vậy? Tôi nghĩ rằng dữ liệu cá nhân là riêng tư. (Tôi bắt đầu bằng cách cố gắng hiểu các hàm tạo bản sao trong thành ngữ ma cô, nhưng sau đó tôi phát hiện ra rằng tôi thậm chí còn không hiểu tình huống đơn giản này.)