2010-04-24 13 views
24

मैं इसे सी ++ में लिखकर पाइथन रूटीन को तेज करने की कोशिश कर रहा हूं, फिर इसे सीटीपीएस या साइथन का उपयोग कर उपयोग कर रहा हूं।क्या सी ++ कक्षा में खुद को सदस्य के रूप में शामिल किया जा सकता है?

मैं सी ++ के लिए नया ब्रांड हूं। मैं माइक्रोसॉफ्ट विजुअल सी ++ एक्सप्रेस का उपयोग कर रहा हूं क्योंकि यह मुफ़्त है।

मैं एक अभिव्यक्ति वृक्ष को लागू करने की योजना बना रहा हूं, और पोस्टफिक्स ऑर्डर में इसका मूल्यांकन करने की एक विधि है।

class Node { 
    char *cargo; 
    Node left; 
    Node right; 
}; 

मैं left या rightNode के रूप में प्रकार की घोषणा नहीं कर सकते हैं:

समस्या मैं में सही दूर है चलाने

उत्तर

63

नहीं, क्योंकि वस्तु असीम बड़ी होगी (हर Node दो अन्य Node वस्तुओं, जो प्रत्येक सदस्य के रूप में दो अन्य Node वस्तुओं, जो प्रत्येक ... अच्छी तरह से, आप समझ गए सदस्यों के रूप में है, क्योंकि)।

आप कर सकते हैं, हालांकि, एक सदस्य चर के रूप में वर्ग प्रकार के लिए सूचक है:

class Node { 
    char *cargo; 
    Node* left; // I'm not a Node; I'm just a pointer to a Node 
    Node* right; // Same here 
}; 
8

नहीं है, लेकिन यह एक संदर्भ या स्वयं के लिए एक सूचक हो सकता है:

class Node 
{ 
    Node *pnode; 
    Node &rnode; 
}; 
+1

संदर्भ वास्तव में इस मामले में काम नहीं करते हैं क्योंकि उन्हें शून्य होने की अनुमति नहीं है, और आपको शून्य समाप्ति की आवश्यकता है या ग्राफ अनंत होगा। – Blindy

+3

आप नल की गति लेने के लिए एक डमी नोड बना सकते हैं। हालांकि, यह अच्छी तरह से काम नहीं करता है क्योंकि संदर्भ किसी अन्य चीज़ के लिए पुन: असाइन नहीं किए जा सकते हैं, और किसी भी लिंक में संशोधन के लिए रूट पर सभी नोड्स को पुनर्निर्माण की आवश्यकता होगी। – Potatoswatter

+0

@ ब्लिंडी: आप न्यूल के बजाय '* this' में नोड संदर्भ भी सेट कर सकते हैं। – MSalters

21

बस पूर्णता के लिए, ध्यान दें कि एक वर्ग में स्वयं का एक स्थिर उदाहरण हो सकता है:

class A 
{ 
    static A a; 
}; 

यह इसलिए है क्योंकि स्थैतिक सदस्यों को कक्षा के उदाहरणों में वास्तव में संग्रहीत नहीं किया जाता है, इसलिए कोई रिकर्सन नहीं होता है।

+0

इसने मेरे सिर को थोड़ा सा नीचे कर दिया है, इसलिए मैं कुछ जोड़ूंगा: इस मामले में, कक्षा 'ए' के ​​प्रत्येक उदाहरण केवल 'ए' उदाहरण के लिए स्थिर स्मृति में आवंटित स्थान पर एक सूचक को संग्रहीत करेगा। तो 'ए' इंस्टेंस में एक पॉइंटर भी होता है, जो खुद को असीम रूप से इंगित करता है: 'ए * कुछ ए = नया ए;' 'कुछ ए ->। Aaa..etc.' (मान लीजिए' ए 'एक सार्वजनिक विशेषता है) और यही कारण है कि परिमित में इस्तेमाल स्मृति। – hymced

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

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