© whiteMocca/Shutterstock.com

ในโลกของการเขียนโปรแกรม มีตัวเลือกภาษาให้เลือกมากมาย หลายภาษาเรียกว่าภาษาโปรแกรมเชิงวัตถุ ซึ่งเน้นไปที่การออกแบบโปรแกรมรอบๆ วัตถุและวิธีที่พวกมันมีปฏิสัมพันธ์ระหว่างกัน

ด้วยเหตุนี้ คุณสมบัติของออบเจกต์จึงถูกกำหนดโดยคลาสและถูกใช้เพื่อบรรจุข้อมูลและรหัสสำหรับการดำเนินการกับข้อมูลนั้น

ก ตัวอย่างที่นิยมของภาษาเชิงวัตถุคือ C++ และการใช้งานส่วนใหญ่เกี่ยวข้องกับฟังก์ชันเพื่อนและคลาสเพื่อน ในบทความนี้ เราจะมาดูกันว่าฟังก์ชันของเพื่อนและคลาสของเพื่อนคืออะไร และใช้กับ C++ อย่างไร

ฟังก์ชันและคลาสของเพื่อนคืออะไร

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

นี่คือที่มาของคำว่าเพื่อนและฟังก์ชันเพื่อน ฟังก์ชันเพื่อนสามารถเข้าถึงข้อมูลที่ได้รับการป้องกันและเป็นส่วนตัว และสามารถประกาศได้โดยใช้คีย์เวิร์ดเพื่อน ด้วยเหตุนี้ ฟังก์ชันเพื่อนสามารถใช้เพื่อดำเนินการกับออบเจกต์ของคลาสตั้งแต่หนึ่งคลาสขึ้นไป

เป็นที่น่าสังเกตว่าฟังก์ชันเพื่อนสามารถเป็นได้ทั้งฟังก์ชันสมาชิก (เชื่อมโยงกับคลาสเฉพาะ) หรือฟังก์ชันส่วนกลาง (กำหนดนอกคลาสใดก็ได้)

ฟังก์ชันเพื่อนคือฟังก์ชันภายนอกปกติที่ได้รับสิทธิพิเศษในการเข้าถึง

©gonin/Shutterstock.com

คลาสเพื่อนทำหน้าที่ในลักษณะเดียวกัน แต่เนื่องจากทั้งคลาสเป็น”เพื่อน”ของอีกคลาส ฟังก์ชันสมาชิกทั้งหมดของคลาสเพื่อนจึงสามารถเข้าถึง สมาชิกของชั้นเรียนอื่น

กล่าวอีกนัยหนึ่ง ฟังก์ชันเพื่อนถูกประกาศให้เป็นเพื่อนของชั้นเรียนเฉพาะ ในขณะที่ชั้นเรียนของเพื่อนถูกกำหนดไว้ในชั้นเรียนที่คุณต้องการให้เป็นเพื่อนด้วย

วิธีการ ใช้ฟังก์ชันเพื่อน

ตอนนี้เราได้กล่าวถึงฟังก์ชันและคลาสของเพื่อนแล้ว ก็ถึงเวลาดูตัวอย่างวิธีนำฟังก์ชันเพื่อนไปใช้:

class MyClass { private: int x; สาธารณะ: เพื่อนเป็นโมฆะ myFriendFunction (MyClass& obj) { obj.x=10; } }

ในที่นี้ เราได้กำหนดฟังก์ชัน “myFriendFunction” เป็นเพื่อนของชั้นเรียน “MyClass” ด้วยเหตุนี้ ฟังก์ชันจึงถูกประกาศภายในคำจำกัดความของคลาสและสามารถเข้าถึงสมาชิกส่วนตัวของคลาสนี้ ซึ่งก็คือ “x” ได้

วิธีใช้ฟังก์ชัน Global Friend

หากเราต้องการ ประกาศฟังก์ชันเพื่อนเป็นฟังก์ชันสากล เราต้องกำหนดนอกนิยามคลาส สามารถทำได้คล้ายกับตัวอย่างก่อนหน้านี้:

class MyClass { ส่วนตัว: int x; สาธารณะ: เพื่อนทำให้ GlobalFriendFunction ของฉันเป็นโมฆะ (MyClass& obj); }; ถือเป็นโมฆะ myGlobalFriendFunction (MyClass& obj) { obj.x=10; }

โดยพื้นฐานแล้วรหัสจะเหมือนกัน ยกเว้นว่าฟังก์ชันเพื่อนถูกกำหนดไว้ภายนอกชั้นเรียน ด้วยเหตุนี้ ฟังก์ชันเพื่อนนี้จึงอาจเป็นเพื่อนของคลาสใดก็ได้ เนื่องจากไม่ได้ถูกกำหนดไว้ในคลาส

วิธีประกาศฟังก์ชันเป็นเพื่อนของหลายคลาส

คุณไม่จำเป็นต้องหยุดเพียงแค่สร้างฟังก์ชันให้เป็นมิตรกับคลาสเดียว ฟังก์ชันสามารถเป็นเพื่อนกับหลายคลาสได้ ดูวิธีการด้านล่าง:

class MyClass1; คลาส MyClass2 { ส่วนตัว: int y; สาธารณะ: เพื่อนเป็นโมฆะ myFriendFunction (MyClass1&, MyClass2&); }; คลาส MyClass1 { ส่วนตัว: int x; สาธารณะ: เพื่อนเป็นโมฆะ myFriendFunction (MyClass1&, MyClass2&); }; ถือเป็นโมฆะ myFriendFunction (MyClass1& obj1, MyClass2& obj2) { obj1.x=10; obj2.y=20; }

ในที่นี้ เราได้กำหนดสองคลาส ได้แก่”MyClass1″และ”MyClass2″รวมถึงฟังก์ชันส่วนกลาง”myFriendFunction”ฟังก์ชันเพื่อนถูกประกาศภายในคำจำกัดความของคลาสทั้งสอง และดังนั้นจึงสามารถแก้ไขสมาชิกไพรเวตของออบเจ็กต์ทั้งสองนี้ได้ กล่าวคือ สมาชิก “x” และ “y” โปรดทราบว่าบรรทัดแรกใช้เพื่อส่งต่อประกาศ “MyClass1”

เพื่อนในชั้นเรียนสามารถ เข้าถึงสมาชิกส่วนตัวและได้รับการคุ้มครองของชั้นเรียนที่ประกาศเป็นเพื่อน

©Yurchanka Siarhei/Shutterstock.com

สิ่งนี้ทำให้คอมไพเลอร์ทราบเกี่ยวกับการมีอยู่ของ “MyClass1” โดยไม่ต้องกำหนดก่อน. สิ่งนี้ทำเพื่อให้พิจารณา”MyClass1″เมื่อรวบรวมการประกาศฟังก์ชันเพื่อนเพื่อหลีกเลี่ยงข้อผิดพลาดในการรวบรวม

วิธีใช้คลาสเพื่อน

ในตัวอย่างก่อนหน้านี้ เรากำหนด “myFriendFunction” ในฐานะเพื่อนของชั้นเรียน “MyClass” สิทธิ์ในการเข้าถึงและแก้ไขสมาชิกส่วนตัว “x” นั้นมอบให้กับคลาสเพื่อน

อย่างไรก็ตาม คลาสเพื่อนดูแตกต่างออกไปเล็กน้อย นี่คือตัวอย่าง:

คลาส MyClass { ส่วนตัว: int x; สาธารณะ: คลาสเพื่อน MyFriendClass; }; คลาส MyFriendClass { สาธารณะ: เป็นโมฆะ myFunction (MyClass& obj) { obj.x=10; } }

ในกรณีนี้ คลาส “MyFriendClass” ถูกกำหนดให้เป็นคลาสเพื่อนของคลาส “MyClass” ทุกฟังก์ชันภายในสามารถเข้าถึงสมาชิกส่วนตัว “x” เช่น ฟังก์ชันสมาชิก “myFunction”

สรุป

คำหลักเพื่อนสามารถใช้เพื่อประกาศฟังก์ชันเพื่อน สิ่งนี้ทำให้ฟังก์ชันเข้าถึงสมาชิกส่วนตัวของคลาสได้ คุณยังสามารถใช้คำหลักเพื่อนเพื่อประกาศชั้นเรียนของเพื่อน ซึ่งหมายความว่าฟังก์ชันสมาชิกทั้งหมดของคลาสนี้สามารถเข้าถึงคลาสที่เป็นมิตรได้

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

ถัดไป

ฟังก์ชันเพื่อนและคลาสเพื่อนใน C++, คำถามที่พบบ่อยที่อธิบายไว้ (คำถามที่พบบ่อย) 

ฟังก์ชันเพื่อนคืออะไร

ฟังก์ชันเพื่อนคือฟังก์ชันที่ได้รับสิทธิ์เข้าถึงสมาชิกส่วนตัวของชั้นเรียนโดยใช้คีย์เวิร์ดเพื่อน

คลาสเพื่อนคืออะไร

คลาสเพื่อนทำงานคล้ายกัน ยกเว้นว่าฟังก์ชันสมาชิกทั้งหมดของคลาสเพื่อนสามารถเข้าถึงสมาชิกที่ได้รับการป้องกันของคลาสอื่นได้

p>

ฟังก์ชันเพื่อนเป็นสมาชิกหรือฟังก์ชันส่วนกลางหรือไม่

อาจเป็นอย่างใดอย่างหนึ่งก็ได้ หากคุณกำหนดฟังก์ชันเพื่อนนอกชั้นเรียน ฟังก์ชันดังกล่าวจะเป็นฟังก์ชันส่วนกลางและอาจเข้าถึงชั้นเรียนอื่นๆ ได้ หากถูกกำหนดไว้ในคำจำกัดความของคลาส ก็จะเข้าถึงได้เฉพาะสมาชิกของคลาสนั้น

ทำไมคุณถึงใช้ฟังก์ชันเพื่อนหรือคลาส

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

ฟังก์ชันเพื่อนสามารถเข้าถึงสมาชิกของคลาสย่อยได้หรือไม่

ไม่ได้ หากถูกกำหนดไว้ในคลาสพื้นฐาน จากนั้นจะไม่สามารถเข้าถึงสมาชิกของคลาสย่อยได้

ฟังก์ชันเพื่อนมีผลกับประสิทธิภาพหรือไม่

ไม่ ฟังก์ชันเพื่อนมีผลเฉพาะกับการมองเห็นของคลาสส่วนตัวเท่านั้น สมาชิก

สามารถสืบทอดชั้นเรียนของเพื่อนได้หรือไม่

ได้ สามารถสืบทอดชั้นเรียนของเพื่อนได้

By Maxwell Gaven

ฉันทำงานด้านไอทีมา 7 ปี เป็นเรื่องสนุกที่ได้เห็นการเปลี่ยนแปลงอย่างต่อเนื่องในภาคไอที ไอทีคืองาน งานอดิเรก และชีวิตของฉัน