© 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>
ฟังก์ชันเพื่อนเป็นสมาชิกหรือฟังก์ชันส่วนกลางหรือไม่
อาจเป็นอย่างใดอย่างหนึ่งก็ได้ หากคุณกำหนดฟังก์ชันเพื่อนนอกชั้นเรียน ฟังก์ชันดังกล่าวจะเป็นฟังก์ชันส่วนกลางและอาจเข้าถึงชั้นเรียนอื่นๆ ได้ หากถูกกำหนดไว้ในคำจำกัดความของคลาส ก็จะเข้าถึงได้เฉพาะสมาชิกของคลาสนั้น
ทำไมคุณถึงใช้ฟังก์ชันเพื่อนหรือคลาส
พวกเขา’มีประโยชน์สำหรับการให้สิทธิ์การเข้าถึงแก่สมาชิกคลาสส่วนตัวหรือที่ได้รับการป้องกัน โดยไม่ต้องเปิดเผยข้อมูลทั้งหมดนี้ต่ออินเทอร์เฟซสาธารณะ นี่เป็นสิ่งสำคัญในการรักษาการซ่อนและการห่อหุ้มข้อมูล
ฟังก์ชันเพื่อนสามารถเข้าถึงสมาชิกของคลาสย่อยได้หรือไม่
ไม่ได้ หากถูกกำหนดไว้ในคลาสพื้นฐาน จากนั้นจะไม่สามารถเข้าถึงสมาชิกของคลาสย่อยได้
ฟังก์ชันเพื่อนมีผลกับประสิทธิภาพหรือไม่
ไม่ ฟังก์ชันเพื่อนมีผลเฉพาะกับการมองเห็นของคลาสส่วนตัวเท่านั้น สมาชิก
สามารถสืบทอดชั้นเรียนของเพื่อนได้หรือไม่
ได้ สามารถสืบทอดชั้นเรียนของเพื่อนได้