คำหลัก“ เพื่อน” ใช้ทำอะไร


11

คุณช่วยอธิบายให้ฉันฟังได้ไหมว่าเพราะเหตุใดfriendคำหลักจึงเหมาะสำหรับการให้สิทธิ์การเข้าถึงข้อมูลส่วนตัวของชั้นเรียน


1
หากคุณถามว่าทำไมจึงfriendเป็นที่ต้องการคุณจะใช้วิธีอื่นในการเข้าถึงข้อมูลชั้นเรียนส่วนตัวจากภายนอกอย่างไร
Benjamin Bannier

@ honk "Preferred" อาจเป็นคำที่ผิดที่ใช้ที่นี่ ฉันแก้ไขบทความส่วนใหญ่เพื่อแก้ไขไวยากรณ์และ whatnot และฉันยังคงใช้คำเดิมอยู่ แต่ฉันคิดว่าอาจมีอุปสรรคด้านภาษาอยู่ที่นี่
อดัมเลียร์

ฉันไม่รู้เพราะฉันอ่านเกี่ยวกับเพื่อนวันนี้โดยบังเอิญ และบทความบอกว่าถ้าฉันไม่ได้ใช้เพื่อนฉันจะสร้างคลาส monolit
Dalton

คำตอบ:


17

เพื่อนเป็นวิธีที่คลาสสิกในการขยายส่วนต่อประสานของชั้นเรียน
แต่สิ่งที่ดีคือเพื่อนคนนั้นบันทึกความตั้งใจของคุณไว้อย่างชัดเจนว่าจะผูกรายการเฉพาะไว้ในชั้นเรียนอย่างแน่นหนา

หมายเหตุ: โดยใช้เพื่อนคุณจะผูกพันเพื่อนเข้ากับชั้นเรียนอย่างแน่นหนา

ตัวอย่างที่สมบูรณ์แบบคือตัวดำเนินการสตรีมใน 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 จะต้องมีการเปลี่ยนแปลงการใช้งานของตัวดำเนินการกระแสข้อมูล) แต่สิ่งนี้คาดว่า ทุกส่วนของส่วนต่อประสานสาธารณะ (รวมถึงวิธีสาธารณะ / ที่ได้รับการป้องกัน) จะถูกผูกไว้อย่างแน่นหนากับการใช้งาน

แต่หมายเหตุ: คุณได้บันทึกการเชื่อมโยงนี้ไว้อย่างชัดเจนซึ่งเป็นส่วนหนึ่งของการประกาศคลาส

หมายเหตุ: ฉันจะไม่อ้างถึงเพื่อนเป็นวิธีที่แนะนำในการเปิดเผยข้อมูลส่วนตัว การใช้เกินเพื่อนอาจไม่ดีเท่าการเปิดเผยการใช้งาน เช่นเดียวกับคุณสมบัติด้านภาษาทั้งหมดควรใช้อย่างรอบคอบ


หากคุณสามารถเข้าถึงข้อมูลแบบสาธารณะ (เช่นผ่านผู้ทะเยอทะยาน) คุณจะใช้ฟังก์ชันฟรีแทนหรือไม่
Ioanna
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.