2010-12-12 21 views
16

जावा में, बजाय गुंजाइश ऑपरेटर का उपयोग कर के, सुपर प्रयोग किया जाता है उदाहरण के लिए:सी ++ "सुपर" के बराबर?

C++ -> GenericBase::SomeVirtualFunction(); 
Java -> super.someVirtualMethod(); 

सी में कुछ इस तरह वहाँ है ++ या यह नहीं एकाधिक वंशानुक्रम की वजह से C++ में मतलब होता है?

धन्यवाद

+2

मुझे सी ++ में 'बेस' या 'सुपर' के बराबर नहीं पता है। आपको मूल वर्ग के नाम का स्पष्ट रूप से उपयोग करने की आवश्यकता है। – CodesInChaos

+7

मुझे लगता है कि आपने अपने प्रश्न का उत्तर दिया है। एमएसवीसी में – someguy

+0

__super। दो अंडरस्कोर, बस यह सुनिश्चित करने के लिए कि यह स्पष्ट है कि यह मानक नहीं है। –

उत्तर

4

वहाँ सी ++ में ऐसी कोई बात नहीं है, हालांकि आप अपने खुद के typedef प्रदान कर सकते हैं:

struct Derived : Base 
{ 
    typedef Base super; 
}; 
+1

@wqking द्वारा उत्तर देखें जो टाइपिफ़ को 'निजी:' अनुभाग में डालने की अनुशंसा करता है। – aldo

5

माइक्रोस्कोफ्ट कंपाइलर्स (सी ++ मानक कमेटी द्वारा अस्वीकार) एक्सटेंशन __super

संपादित करें: सुपर कोड के पाठकों को भ्रमित कर सकता है। सी ++ में एकाधिक विरासत के कारण यह अधिक स्पष्ट होना बेहतर है। एकाधिक विरासत पहले ही जटिल है। टेम्पलेट्स के लिए सुपर की उपयोगीता के बारे में AFAIK चर्चा हुई थी, जिसे महसूस किया गया था कि अगर किसी को यह चाहिए तो कोई भी सुपर टाइप कर सकता है।

+0

मानकों समिति ने इसे क्यों खारिज कर दिया है इस पर कोई टिप्पणी? (मुझे एहसास नहीं हुआ कि यह भी विचार के लिए था ...) –

+2

मैं __super कीवर्ड का भी उपयोग करता हूं, यदि आप बेस क्लास और सामान बदल रहे हैं तो बहुत मदद करता है। विशेष रूप से एमएफसी में। शर्म की बात यह मानक नहीं है, एक बहुत ही आसान सुविधा है। – Coder

5

मार्टिन के लिंक में टाइपपीफ चाल काफी अच्छी तरह से काम करती है (और यह आंशिक कारण है कि सी ++ में सुपर या विरासत में काम नहीं किया गया है AFAIR।) केवल एक चीज जिसकी हमें देखभाल करने की आवश्यकता है वह यह है कि टाइपिफ़ाफ़ निजी अनुभाग में होना चाहिए । इसे संरक्षित या सार्वजनिक खंड में न रखें, अन्यथा, व्युत्पन्न वर्ग टाइपिफ़ का उपयोग गलत तरीके से अपने दादा के बजाय अपने दादाजी को संदर्भित करने के लिए कर सकता है।

संबंधित मुद्दे