
คุณสมบัติเพื่อน ไม่ว่าจะใช้โดยฟังก์ชั่นหรือชั้นเรียนสามารถสร้างผลกระทบเชิงลบต่อกรอบวัตถุที่มุ่งเน้นไปที่มันอ่อนตัว encapsulation ซึ่งเป็นต่อกรอบความคิด เชิงวัตถุ นี่คือเหตุผลที่คุณสมบัติเพื่อนต้องใช้อย่างฉลาดไม่เช่นนั้นอาจ ทำให้ การ ซ่อน รหัสของข้อมูลแตกได้
ฟีเจอร์เพื่อนนี้ไม่ใช่ทั้งการ สับเปลี่ยน และไม่มี การถ่ายทอด X คือเพื่อนของ Y ไม่ได้อนุมานว่า Y ก็เป็นเพื่อนของ X ด้วยถ้า X เป็นเพื่อนของ Y และ Y เป็นเพื่อนของ Z ไม่ได้บอกเป็นนัยว่า X เป็นเพื่อนของ Z
แผนภูมิเปรียบเทียบ
พื้นฐานสำหรับการเปรียบเทียบ | ฟังก์ชั่นเพื่อน | เพื่อนชั้น |
---|---|---|
ขั้นพื้นฐาน | มันเป็นฟังก์ชั่นที่ใช้กับคำหลักเพื่อนเพื่อให้สิทธิ์การเข้าถึงฟังก์ชั่นที่ไม่ใช่สมาชิกให้กับสมาชิกส่วนตัวของชั้นเรียน | มันเป็นชั้นเรียนที่ใช้กับคำหลักเพื่อนในการเข้าถึงสมาชิกส่วนตัวของชั้นเรียนอื่น |
ส่งต่อการประกาศ | จะต้องใช้ | ไม่บังคับ |
ใช้ | ฟังก์ชั่นเพื่อนสามารถนำมาใช้ในบางสถานการณ์ของผู้ประกอบการมากไป | คลาสเพื่อนสามารถใช้เมื่อสร้างคลาสที่ด้านบนของคลาสอื่น |
ความหมายของฟังก์ชั่นเพื่อน
ฟังก์ชั่นเพื่อน จะใช้ในการเข้าถึงสมาชิกส่วนตัวและได้รับการป้องกันของชั้นเรียนโดยการอนุญาตให้ฟังก์ชั่นที่ไม่ใช่สมาชิกได้รับการเข้าถึง ในฟังก์ชั่นประเภทนี้คีย์เวิร์ดของเพื่อนจะถูกใช้ก่อนชื่อฟังก์ชั่น ณ เวลาที่ประกาศ มีเงื่อนไขข้อ จำกัด บางประการที่นำไปใช้กับฟังก์ชั่นเพื่อน เงื่อนไขแรกคือฟังก์ชันเพื่อนนั้นไม่ได้รับการสืบทอดโดยคลาสย่อย เงื่อนไขที่สองคือตัวระบุคลาสหน่วยเก็บข้อมูลอาจไม่ปรากฏในฟังก์ชันเพื่อนซึ่งหมายความว่าไม่สามารถประกาศว่าเป็นแบบคงที่และภายนอกได้
ฟังก์ชั่นเพื่อนไม่ได้ถูกเรียกด้วยวัตถุที่อ้างถึงของชั้นเรียน ตัวอย่างของฟังก์ชั่นเพื่อนคือฟังก์ชั่นทั่วโลกฟังก์ชั่นสมาชิกของชั้นเรียนแม่แบบฟังก์ชั่นสามารถฟังก์ชั่นเพื่อน มาทำความเข้าใจกับมันด้วยความช่วยเหลือของตัวอย่าง
# รวมถึงการใช้เนมสเปซ std; ชั้นแรก {ข้อมูล int; สาธารณะ: แรก (int i): data (i) {} การแสดงผลเป็นโมฆะเพื่อน (const first & a); }; การแสดงผลเป็นโมฆะ (กลุ่มแรก & a) {ศาล << "data =" <คำจำกัดความของ Friend Class
คล้ายกับฟังก์ชั่นเพื่อนเราสามารถทำให้ชั้นหนึ่งเป็นเพื่อนของชั้นเรียนอื่นซึ่งเรียกว่า ชั้นเรียนเพื่อน เพื่อให้ชั้นเรียนเพื่อนสามารถเข้าถึงสมาชิกส่วนตัวที่กำหนดไว้ในชั้นเรียนอื่น สิ่งสำคัญคือต้องจำไว้ว่าคลาสเพื่อนสามารถเข้าถึงชื่อที่กำหนดภายในคลาสอื่นเท่านั้นแทนที่จะสืบทอดคลาสอื่น แม่นยำสมาชิกชั้นหนึ่งไม่สามารถเป็นสมาชิกของกลุ่มเพื่อนได้ ชั้นเรียนเพื่อนเหล่านี้ไม่ค่อยได้ใช้
คลาสเพื่อนสามารถประกาศได้มากกว่าหนึ่งคลาส มันถือเป็นวิธีทางเลือกสั้น ๆ สำหรับฟังก์ชั่นเพื่อนเพราะด้วยความช่วยเหลือของสิ่งนี้เราสามารถสร้างชั้นเรียนเพื่อนที่สามารถเข้าถึงข้อมูลสมาชิกทั้งหมดและฟังก์ชั่นแทนการสร้างฟังก์ชั่นเพื่อนหลายคน
# รวมถึงการใช้เนมสเปซ std; ชั้นเรียนแรก {// ประกาศเพื่อนชั้นเรียนเพื่อนชั้นสอง; สาธารณะ: First (): a (0) {} void print () {cout << "ผลลัพธ์ที่ได้คือ" << a << endl; } ส่วนตัว: int a; }; class Second {public: void change (First & yclass, int x) {yclass.a = x; }}; int main () // ผลลัพธ์ผลลัพธ์คือ 0 ผลลัพธ์คือ 5ความแตกต่างที่สำคัญระหว่างฟังก์ชั่นเพื่อนและเพื่อนในชั้นเรียน
- ฟังก์ชั่นเพื่อนเป็นฟังก์ชั่นที่สามารถเข้าถึงสมาชิกส่วนตัวและได้รับการป้องกันของชั้นเรียน ในทางตรงกันข้ามชั้นเรียนเป็นชั้นเรียนที่ช่วยในการเข้าถึงสมาชิกส่วนตัวของชั้นเรียน
- ฟังก์ชั่นเพื่อนได้รับการประกาศโดยรวมถึงต้นแบบของมันในชั้นเรียนต่อต้านมันด้วยคำหลักเพื่อน ในทำนองเดียวกันคลาสเพื่อนก็มีการกำหนดโดยใช้คำหลักเพื่อน
- การประกาศไปข้างหน้าถูกนำมาใช้ในกรณีที่ฟังก์ชั่นเพื่อนขัดต่อมันไม่จำเป็นต้องใช้มันในชั้นเรียนเพื่อน
ข้อสรุป
จำเป็นต้องใช้ฟังก์ชั่นเพื่อนเมื่อฟังก์ชั่นต้องการเข้าถึงคลาสอิสระอย่างน้อยสองคลาสสมาชิกภายใน ในทางตรงกันข้ามชั้นเรียนเป็นสิ่งจำเป็นเมื่อชั้นเรียนต้องการเข้าถึงสมาชิกของชั้นเรียนอื่น เมื่อฟังก์ชั่นสมาชิกหลายคนจำเป็นต้องเป็นเพื่อนของฟังก์ชั่นนั้นในกรณีนั้นจะเป็นการดีกว่าถ้าใช้คลาสเพื่อน