oop - Object oriented programming in C -
<पी> मुझे याद है कि कुछ समय पहले किसी के बारे में (मुझे लगता है कि यह लीनस टॉर्वाल्ड्स था) सीओ + एक भयानक भाषा है और आप सी के साथ ऑब्जेक्ट-ओरिएंटेड प्रोग्राम कैसे लिख सकते हैं, इसके बारे में बात करते हुए मुझे प्रतिबिंबित करने के लिए समय था, वास्तव में देखें कि कैसे सभी वस्तु उन्मुख अवधारणाओं को सी में ले जाता है। कुछ चीजें काफी स्पष्ट हैं उदाहरण के लिए:संभावित डुप्लिकेट:
- सदस्य कार्यों का अनुकरण करने के लिए, आप स्ट्रक्क्ट्स में फ़ंक्शन पॉइंटर्स डाल सकते हैं।
- बहुरूपता का अनुकरण करने के लिए, आप एक फ़ंक्शन लिख सकते हैं जो तर्कों की एक चर संख्या और पर कुछ जादू करते हैं, कहते हैं,
sizeof
पैरामीटर (s)
आप encapsulation और विरासत हालांकि कैसे अनुकरण होगा?
मुझे लगता है कि इनकैप्सुलेशन को एक नेस्टेड स्ट्रैट रखने के द्वारा अनुकरण किया जा सकता है जो कि निजी सदस्यों को संग्रहीत करता है। यह काफी आसान हो जाएगा, लेकिन संभवत: प्राइवेट
नाम का हो सकता है या संकेत के समान कुछ भी स्पष्ट है कि इसका अर्थ संरचना के बाहर से नहीं किया जाता है आप विरासत के बारे में क्या कर सकते हैं?
आप नियमित कार्यों और आभासी तालिकाओं (vtables) के साथ बहुरूपता को लागू कर सकते हैं। यहां एक बहुत ही सुव्यवस्थित प्रणाली है जिसे मैंने प्रोग्रामिंग अभ्यास के लिए (सी ++ पर आधारित) का आविष्कार किया है:
कन्स्ट्रक्टर स्मृति आवंटित करते हैं और फिर क्लास के इनिट फ़ंक्शन को कॉल करते हैं जहां मेमोरी आरम्भ हो जाती है। प्रत्येक init फ़ंक्शन में एक स्थैतिक vtable स्ट्रैट शामिल होना चाहिए जिसमें वर्चुअल फ़ंक्शन पॉइंटर्स (शुद्ध वर्चुअल के लिए NULL) शामिल हैं। व्युत्पन्न वर्ग init फ़ंक्शंस कुछ और करने से पहले superclass init फ़ंक्शन कहते हैं।
वर्चुअल फंक्शन रैपरर्स को कार्यान्वित करके एक बहुत अच्छी एपीआई बनाया जा सकता है (vtables द्वारा इंगित कार्यों के साथ भ्रमित नहीं होने के लिए) (हेडर में यदि आप ऐसा करते हैं, तो इसके अंदर स्थिर इनलाइन
जोड़ें):
int playerGuess (प्लेयर * यह) {इस-> वीटेल- & gt; (यह) लगता है; }
सिंगल वंशानुक्रम एक स्ट्रेट के बाइनरी लेआउट का दुरुपयोग करके किया जा सकता है:
ध्यान दें कि एकाधिक वंशानुक्रम मैसेंजर है, इसलिए आपको पदानुक्रम के प्रकारों के बीच कास्टिंग करते समय पॉइंटर वैल्यू को समायोजित करने की आवश्यकता होती है।
अन्य प्रकार-विशिष्ट डेटा जोड़ा जा सकता है आभासी तालिकाओं के साथ ही उदाहरणों में रनटाइम प्रकार की जानकारी शामिल होती है (उदाहरण के लिए एक स्ट्रिंग के रूप में टाइप करें), सुपर-क्लास वीटेल और डिस्ट्रिक्टर श्रृंखला से जुड़कर। आप शायद वर्चुअल डिस्ट्रक्टर्स चाहते हैं, जहां व्युत्पन्न क्लास डिस्ट्रक्टर ऑब्जेक्ट को अपने सुपर क्लास के लिए डिमिट करता है और फिर उस के डिस्ट्रिक्टर को कॉल करता है और तब तक, जब तक कि बेस क्लास डिस्ट्रक्टर तक नहीं पहुंच जाता है और अंततः स्ट्रेट को मुक्त कर देता है।
< B> इनकैप्सुलेशन स्ट्रिंग्स को खिलाड़ी द्वारा संरक्षित कर दिया गया था, और खिलाड़ी- संरक्षित किया गया था, और इसी तरह से व्युत्पन्न कक्षाओं के लिए कार्य (कार्यान्वयन के रूप में इंगित किया गया है), लेकिन यह काफी बेढ़ंगे है और यह प्रदर्शन को घटाता है (जैसा कि आभासी आवरण को हेडर में नहीं रखा जा सकता है), इसलिए मैं इसके खिलाफ सुझाऊंगा।
Comments
Post a Comment