คุณช่วยอธิบายให้ฉันฟังได้ไหมว่าเพราะเหตุใดfriend
คำหลักจึงเหมาะสำหรับการให้สิทธิ์การเข้าถึงข้อมูลส่วนตัวของชั้นเรียน
คุณช่วยอธิบายให้ฉันฟังได้ไหมว่าเพราะเหตุใดfriend
คำหลักจึงเหมาะสำหรับการให้สิทธิ์การเข้าถึงข้อมูลส่วนตัวของชั้นเรียน
คำตอบ:
เพื่อนเป็นวิธีที่คลาสสิกในการขยายส่วนต่อประสานของชั้นเรียน
แต่สิ่งที่ดีคือเพื่อนคนนั้นบันทึกความตั้งใจของคุณไว้อย่างชัดเจนว่าจะผูกรายการเฉพาะไว้ในชั้นเรียนอย่างแน่นหนา
หมายเหตุ: โดยใช้เพื่อนคุณจะผูกพันเพื่อนเข้ากับชั้นเรียนอย่างแน่นหนา
ตัวอย่างที่สมบูรณ์แบบคือตัวดำเนินการสตรีมใน C ++
class Plop
{
private:
int value;
friend std::ostream& operator<<(std::ostream& stream, Plop const& data);
friend std::istream& operator>>(std::istream& stream, Plop& data);
};
std::ostream& operator<<(std::ostream& stream, Plop const& data)
{
return stream << data.value << " ";
}
std::istream& operator>>(std::istream& stream, Plop& data)
{
return stream >> data.value;
}
ที่นี่เรากำลังขยายส่วนต่อประสานสาธารณะของคลาส Plop ด้วยวิธีที่ช่วยให้เราสามารถส่งกระแสข้อมูลวัตถุเข้าและออกจากกระแส แต่ไม่มีการเปิดเผยการใช้งานภายในหรือก่อให้เกิดการปวดหัวในการใช้งานในอนาคตโดยกำหนดให้ใช้ ได้รับการบำรุงรักษา (เพราะมันจะเป็นส่วนหนึ่งของส่วนต่อประสานสาธารณะ) แม้ว่าจะมีการเปลี่ยนแปลงการใช้งานภายใน
หมายเหตุ: สิ่งนี้ไม่ทำลาย encapsulation แต่จะผูกตัวดำเนินการกระแสข้อมูลให้แน่นกับการใช้งานคลาส Plop (เช่นการเปลี่ยนแปลงใด ๆ ในการใช้งานคลาส Plop จะต้องมีการเปลี่ยนแปลงการใช้งานของตัวดำเนินการกระแสข้อมูล) แต่สิ่งนี้คาดว่า ทุกส่วนของส่วนต่อประสานสาธารณะ (รวมถึงวิธีสาธารณะ / ที่ได้รับการป้องกัน) จะถูกผูกไว้อย่างแน่นหนากับการใช้งาน
แต่หมายเหตุ: คุณได้บันทึกการเชื่อมโยงนี้ไว้อย่างชัดเจนซึ่งเป็นส่วนหนึ่งของการประกาศคลาส
หมายเหตุ: ฉันจะไม่อ้างถึงเพื่อนเป็นวิธีที่แนะนำในการเปิดเผยข้อมูลส่วนตัว การใช้เกินเพื่อนอาจไม่ดีเท่าการเปิดเผยการใช้งาน เช่นเดียวกับคุณสมบัติด้านภาษาทั้งหมดควรใช้อย่างรอบคอบ
friend
เป็นที่ต้องการคุณจะใช้วิธีอื่นในการเข้าถึงข้อมูลชั้นเรียนส่วนตัวจากภายนอกอย่างไร