คำถามติดแท็ก virtual-functions

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

1
เหตุใด C ++ ไม่มีคำหลัก“ บริสุทธิ์” สำหรับฟังก์ชันเสมือนจริง
ฉันสงสัยอยู่เสมอว่าทำไมเราถึงโค้ด virtual void MyFunction() = 0; และไม่ pure virtual void MyFunction(); มีการอ้างอิงสำหรับพื้นฐานของการตัดสินใจนี้หรือไม่?

3
ไม่ทำให้สมาชิกสาธารณะเสมือนหรือเป็นนามธรรม - จริงเหรอ?
ย้อนกลับไปในยุค 2000 เพื่อนร่วมงานคนหนึ่งของฉันบอกฉันว่ามันเป็นรูปแบบการต่อต้านเพื่อทำให้วิธีการสาธารณะเสมือนหรือนามธรรม ตัวอย่างเช่นเขาถือว่าคลาสเช่นนี้ไม่ได้ออกแบบมาอย่างดี: public abstract class PublicAbstractOrVirtual { public abstract void Method1(string argument); public virtual void Method2(string argument) { if (argument == null) throw new ArgumentNullException(nameof(argument)); // default implementation } } เขากล่าวว่า นักพัฒนาของคลาสที่ได้รับที่ใช้Method1และการแทนที่Method2มีการทำซ้ำการตรวจสอบอาร์กิวเมนต์ ในกรณีที่ผู้พัฒนาคลาสพื้นฐานตัดสินใจที่จะเพิ่มบางสิ่งรอบ ๆ ส่วนที่กำหนดเองได้Method1หรือMethod2ใหม่กว่าเขาจะไม่สามารถทำได้ เพื่อนร่วมงานของฉันเสนอวิธีการนี้แทน: public abstract class ProtectedAbstractOrVirtual { public void Method1(string argument) { if (argument …
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.