คำถามติดแท็ก friend

30
เมื่อใดที่คุณควรใช้ 'เพื่อน' ใน C ++
ฉันได้อ่านคำถามที่พบบ่อย C ++และอยากรู้เกี่ยวกับการfriendประกาศ ฉันเองไม่เคยใช้มันเป็นการส่วนตัว แต่ฉันสนใจที่จะสำรวจภาษา ตัวอย่างที่ดีของการใช้friendคืออะไร อ่านคำถามที่พบบ่อยอีกเล็กน้อยฉันชอบความคิดของ<< >>ผู้ประกอบการมากไปและเพิ่มเป็นเพื่อนของชั้นเรียนเหล่านั้น อย่างไรก็ตามฉันไม่แน่ใจว่าวิธีนี้จะไม่ทำลาย encapsulation ข้อยกเว้นเหล่านี้จะอยู่ภายในความเข้มงวดของ OOP เมื่อใด
354 c++  oop  encapsulation  friend 

22
เหตุใด C # จึงไม่มีคำหลัก 'เพื่อน' สไตล์ C ++ [ปิด]
ปิด คำถามนี้เป็นคำถามความคิดเห็นตาม ไม่ยอมรับคำตอบในขณะนี้ ต้องการปรับปรุงคำถามนี้หรือไม่ อัปเดตคำถามเพื่อให้สามารถตอบข้อเท็จจริงและการอ้างอิงได้โดยแก้ไขโพสต์นี้ ปิดให้บริการใน3 ปีที่ผ่านมา ปรับปรุงคำถามนี้ เพื่อนคำหลัก C ++ช่วยให้ผู้class Aที่จะกำหนดให้class Bเป็นเพื่อนของตน นี้จะช่วยให้Class Bการเข้าถึงprivate/ สมาชิกของprotectedclass A ฉันไม่เคยอ่านอะไรเลยว่าทำไมสิ่งนี้ถึงถูกทิ้งไว้ใน C # (และ VB.NET) คำตอบส่วนใหญ่ของคำถาม StackOverflow ก่อนหน้านี้ดูเหมือนจะบอกว่าเป็นส่วนที่มีประโยชน์ของ C ++ และมีเหตุผลที่ดีที่จะใช้ จากประสบการณ์ของฉันฉันต้องยอมรับ คำถามอื่นดูเหมือนว่าฉันจะถามจริง ๆ ว่าจะทำสิ่งที่คล้ายกับfriendในใบสมัคร C # ในขณะที่คำตอบโดยทั่วไปจะหมุนรอบคลาสที่ซ้อนกัน แต่ก็ไม่ได้ดูสวยงามเท่าการใช้friendคำหลัก หนังสือรูปแบบการออกแบบดั้งเดิมใช้เป็นประจำตลอดตัวอย่าง สรุปแล้วทำไมfriendหายไปจาก C # และอะไรคือ "วิธีปฏิบัติที่ดีที่สุด" (หรือวิธี) ในการจำลองใน C # (โดยวิธีการที่internalคำหลักไม่ได้ในสิ่งเดียวกันจะช่วยให้ทุกชั้นเรียนภายในทั้งการชุมนุมในการเข้าถึงinternalสมาชิกในขณะที่friendช่วยให้คุณสามารถที่จะให้ชั้นหนึ่งการเข้าถึงที่สมบูรณ์ไปอีกหนึ่งระดับอื่น ๆ )
208 c#  c++  design-patterns  oop  friend 

19
มีวิธีจำลองแนวคิด 'เพื่อน' ของ C ++ ใน Java หรือไม่?
ฉันต้องการที่จะสามารถเขียนคลาส Java ในแพ็คเกจหนึ่งซึ่งสามารถเข้าถึงวิธีการที่ไม่ใช่แบบสาธารณะของคลาสในแพ็กเกจอื่นโดยไม่ต้องทำให้คลาสย่อยของคลาสอื่น เป็นไปได้ไหม
197 java  c++  friend  accessor 

2
ฟังก์ชั่นการแลกเปลี่ยนเพื่อนสาธารณะ
ในคำตอบที่สวยงามของcopy-and-swap-idiomมีโค้ดบางส่วนที่ฉันต้องการความช่วยเหลือเล็กน้อย: class dumb_array { public: // ... friend void swap(dumb_array& first, dumb_array& second) // nothrow { using std::swap; swap(first.mSize, second.mSize); swap(first.mArray, second.mArray); } // ... }; และเขาเพิ่มบันทึก มีการอ้างสิทธิ์อื่น ๆ ที่เราควรชำนาญ std :: swap สำหรับประเภทของเราให้การแลกเปลี่ยนในชั้นเรียนพร้อมการแลกเปลี่ยนฟังก์ชั่นฟรีเป็นต้น แต่สิ่งนี้ไม่จำเป็นทั้งหมด: การใช้ swap ที่เหมาะสมจะต้องผ่านการโทรที่ไม่มีเงื่อนไข และฟังก์ชั่นของเราจะพบผ่าน ADL ฟังก์ชั่นหนึ่งจะทำ เนื่องจากfriendฉันใช้คำศัพท์ที่ "ไม่เป็นมิตร" ฉันต้องยอมรับ ดังนั้นคำถามหลักของฉันคือ: ดูเหมือนว่าฟังก์ชั่นฟรีแต่ภายในร่างกายของคลาส? ไม่ได้เป็นเหตุผลนี้swapคง ? เห็นได้ชัดว่ามันไม่ได้ใช้ตัวแปรสมาชิกใด ๆ …

3
ประกาศเพื่อนใน C ++ - ความแตกต่างระหว่างสาธารณะและส่วนตัว
มีความแตกต่างระหว่างการประกาศฟังก์ชั่นเพื่อน / ชั้นเป็นส่วนตัวหรือสาธารณะ? ฉันดูเหมือนจะไม่พบอะไรเกี่ยวกับเรื่องนี้ทางออนไลน์ ฉันหมายถึงความแตกต่างระหว่าง: class A { public: friend class B; }; และ class A { private: //or nothing as the default is private friend class B; }; มีความแตกต่างหรือไม่?
144 c++  private  friend  public 

10
เหตุใด C ++ จึงไม่อนุญาตให้สืบทอดมิตรภาพ
เหตุใดอย่างน้อยมิตรภาพจึงไม่สามารถสืบทอดได้ใน C ++? ฉันเข้าใจว่าการเคลื่อนย้ายและการสะท้อนกลับถูกห้ามด้วยเหตุผลที่ชัดเจน (ฉันพูดสิ่งนี้เพื่อตัดคำตอบของใบเสนอราคาคำถามที่พบบ่อยธรรมดา ๆ เท่านั้น) แต่ฉันขาดบางสิ่งบางอย่างตามแนวของvirtual friend class Foo;ปริศนา มีใครทราบความเป็นมาทางประวัติศาสตร์เบื้องหลังการตัดสินใจครั้งนี้บ้าง? มิตรภาพเป็นเพียงการแฮ็คที่ จำกัด ซึ่งนับตั้งแต่นั้นมาก็กลายเป็นการใช้งานที่น่านับถือที่คลุมเครือไม่กี่อย่าง? แก้ไขเพื่อความกระจ่าง:ฉันกำลังพูดถึงสถานการณ์ต่อไปนี้ไม่ใช่ที่ที่เด็กของ A สัมผัสกับ B หรือทั้ง B และลูก ๆ ของมัน ฉันยังสามารถจินตนาการได้ว่าการอนุญาตให้เข้าถึงการลบล้างฟังก์ชันของเพื่อนเป็นต้น class A { int x; friend class B; }; class B { // OK as per friend declaration above. void foo(A& a, int n) { …
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.