เหตุใดออบเจ็กต์ของคลาสเดียวกันจึงเข้าถึงข้อมูลส่วนตัวของกันและกันได้
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;
}
รหัสนี้ใช้งานได้ เป็นไปได้อย่างสมบูรณ์แบบสำหรับวัตถุ a ในการเข้าถึงข้อมูลส่วนตัวจากวัตถุ b และส่งคืน ทำไมต้องเป็นเช่นนั้น? ฉันคิดว่าข้อมูลส่วนตัวเป็นข้อมูลส่วนตัว (ฉันเริ่มต้นด้วยการพยายามทำความเข้าใจตัวสร้างสำเนาในสำนวน pimpl แต่แล้วฉันก็พบว่าฉันไม่เข้าใจสถานการณ์ง่ายๆนี้ด้วยซ้ำ)