เหตุใด C ++ ไม่มีคำหลัก“ บริสุทธิ์” สำหรับฟังก์ชันเสมือนจริง


31

ฉันสงสัยอยู่เสมอว่าทำไมเราถึงโค้ด

virtual void MyFunction() = 0; 

และไม่

pure virtual void MyFunction();

มีการอ้างอิงสำหรับพื้นฐานของการตัดสินใจนี้หรือไม่?


2
ยังไม่มีความคิดเห็น? โอเคถ้าอย่างนั้น. เพราะนั่นคือวิธีการกำหนดภาษา C ++
gnasher729

4
โปรดทราบว่าฟังก์ชั่น "บริสุทธิ์" มักจะหมายถึงสิ่งที่ไม่เกี่ยวข้อง
user253751

คำตอบ:


71

จากการออกแบบและวิวัฒนาการของ C ++ - Bjarne Stroustrup - Addison-Wesley (ไอ 0-201-54330-3) - บทที่ 13.2.3:

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

อย่างไรก็ตามมองหาที่ที่ C ++ มาตรฐาน (§ 9.2 - สมาชิกชั้น) = 0จะเรียกว่าบริสุทธิ์ระบุ


11
มันเท่ห์มาก เตือนฉันด้วยว่าทำไม PHP จึงมีชื่อฟังก์ชันที่น่าเกลียดมากมาย: เพราะล่ามคนแรกที่ใช้ strlen เป็นฟังก์ชันแฮชและการแจกจ่ายควรจะดี ( i-programmer.info/news/98-language/ … )
Aitch

10
การแนะนำคำหลักตามบริบทใน C ++ 11 ช่วยลดความเสียหายที่เกิดจากการเพิ่มคำหลัก มันควรจะเป็นไปได้ที่จะทำให้pureคำหลักตามบริบทที่คุณใส่ในตอนท้ายของการกำหนดฟังก์ชั่นเพื่อvirtual void MyFunction() pureแทนการ= 0ที่จะไปพร้อมกับและfinal override
Yakk

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

2
ค่อนข้างคำถามใด ๆ ของ "ทำไม C + + ทำ X?" สามารถตอบได้โดยหนังสือเล่มนั้น มันควรจะต้องมีการอ่านสำหรับโปรแกรมเมอร์ C ++ ที่จริงจัง
Gort the Robot

4
@ Random832 เป็น "pure virtual" (เช่นเดียวกับ "100% virtual และ 0% อย่างอื่น") ไม่ใช่แค่ "pure"
user253751
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.