आभासी कार्यों के लिए C ++ में "शुद्ध" कीवर्ड क्यों नहीं है?


31

मैंने हमेशा सोचा है कि हम कोड क्यों करते हैं

virtual void MyFunction() = 0; 

और नहीं

pure virtual void MyFunction();

क्या इस निर्णय के आधार का संदर्भ है?


2
कोई राय नहीं? ठीक है फिर। क्योंकि यही सी + + भाषा परिभाषित है।
gnasher729

4
ध्यान दें कि "शुद्ध" फ़ंक्शन का अर्थ अक्सर कुछ असंबंधित होता है।
user253751

जवाबों:


71

से डिजाइन और सी के विकास ++ Bjarne Stroustrup - - एडिसन-वेस्ले (ISBN 0-201-54330-3) - अध्याय 13.2.3:

= 0एक नए कीवर्ड को पेश करने के स्पष्ट विकल्प के लिए उत्सुक वाक्यविन्यास को चुना गया था pureया abstractक्योंकि उस समय मैंने नए कीवर्ड को स्वीकार करने का कोई मौका नहीं देखा था। अगर मैंने सुझाव दिया होता pure, तो रिलीज़ 2.0 ने अमूर्त कक्षाओं के बिना भेज दिया होता। एक अच्छे वाक्यविन्यास और अमूर्त वर्गों के बीच एक विकल्प को देखते हुए, मैंने अमूर्त कक्षाएं चुनीं। देरी को जोखिम में डालने और कुछ झगड़े को खत्म करने के बजाय pure, मैंने वहां का प्रतिनिधित्व करने के लिए 0 का उपयोग करने की परंपरा सी और सी ++ सम्मेलन का इस्तेमाल किया ।

वैसे भी C ++ मानक (the 9.2 - वर्ग के सदस्यों) = 0को देखने को शुद्ध-विशेष कहा जाता है ।


11
यह अच्छा है। मुझे याद दिलाता है कि PHP के इतने अलग-अलग बदसूरत फ़ंक्शन नाम क्यों हैं: क्योंकि हैश फ़ंक्शन और वितरण के रूप में पहले इंटरप्रेटर का उपयोग स्ट्रैलेन किया जाता है ( i-programmer.info/news/98-languages/… )
Aitch

10
C ++ 11 में संदर्भ-संवेदी खोजशब्दों के परिचय से खोजशब्दों को जोड़ने वाले नुकसान को कम किया जाता है। pureकिसी संदर्भ परिभाषा के अंत में आपके द्वारा डाला जाने वाला प्रासंगिक कीवर्ड बनाना संभव हो सकता है , इसलिए virtual void MyFunction() pureइसके बजाय और = 0साथ जाने के लिए । finaloverride
याकक

21
एक तरफ के रूप में, लगभग हर जगह एक "शुद्ध फ़ंक्शन" को एक फ़ंक्शन माना जाता है जिसका आउटपुट केवल उसके इनपुट पर निर्भर करता है, और जिसका कोई साइड-इफेक्ट नहीं है।
डिडुप्लिकेटर

2
"C ++ को X क्यों करता है?" उस पुस्तक द्वारा उत्तर दिया जा सकता है। यह किसी भी गंभीर सी ++ प्रोग्रामर के लिए पढ़ने की आवश्यकता होनी चाहिए।
को रोबोट

4
@ Random832 यह "शुद्ध आभासी" है (जैसे "100% आभासी और 0% कुछ और"), न कि केवल "शुद्ध"।
user253751
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.