विषय पर बढ़ें

अंतिम अद्यतन:2026-10-12

C भाषा से C++ पॉलीमॉर्फ़िज़्म

लेखक के बारे में:

व्यक्तिगत WeChat सार्वजनिक अकाउंट:

wechat

1.C++ इम्प्लीमेंटेशन उदाहरण

C++ में पॉलीमॉर्फ़िज़्म: C++ में एक वर्चुअल फ़ंक्शन टेबल maintain की जाती है, असाइनमेंट कम्पैटिबिलिटी नियम के अनुसार हम जानते हैं कि पैरेंट क्लास का पॉइंटर या रेफ़रेंस चाइल्ड क्लास के ऑब्जेक्ट को पॉइंट कर सकता है।

अगर पैरेंट क्लास का पॉइंटर या रेफ़रेंस पैरेंट क्लास का वर्चुअल फ़ंक्शन कॉल करता है, तो वह पॉइंटर अपनी वर्चुअल फ़ंक्शन टेबल में अपने फ़ंक्शन का पता खोजता है; अगर पैरेंट क्लास के ऑब्जेक्ट का पॉइंटर या रेफ़रेंस चाइल्ड क्लास के ऑब्जेक्ट को पॉइंट कर रहा है, और उस चाइल्ड क्लास ने पैरेंट क्लास के वर्चुअल फ़ंक्शन को override किया है, तो वह पॉइंटर चाइल्ड क्लास का override किया हुआ वर्चुअल फ़ंक्शन कॉल करेगा।

सीखने के उदाहरण कोड के लिए देखें:c++_examp.cpp

2.C इम्प्लीमेंटेशन

  • एनकैप्सुलेशन

C भाषा में class का कोई कॉन्सेप्ट नहीं है, लेकिन struct होता है, हम struct का उपयोग करके इसे सिमुलेट कर सकते हैं;

फ़ंक्शन पॉइंटर की मदद से एट्रिब्यूट्स और मेथड्स को स्ट्रक्चर में एनकैप्सुलेट किया जाता है।

  • इनहेरिटेंस

स्ट्रक्चर नेस्टिंग

  • पॉलीमॉर्फ़िज़्म

क्लास और चाइल्ड क्लास की मेथड्स के फ़ंक्शन पॉइंटर अलग होते हैं

C भाषा के स्ट्रक्चर के अंदर मेंबर फ़ंक्शन नहीं होते, तो पैरेंट स्ट्रक्चर और चाइल्ड स्ट्रक्चर दोनों के लिए साझा फ़ंक्शन कैसे इम्प्लीमेंट करें? हम फ़ंक्शन पॉइंटर का उपयोग करके इसे सिमुलेट कर सकते हैं। लेकिन इस तरीके में एक कमी है: पैरेंट और चाइल्ड के अपने-अपने फ़ंक्शन पॉइंटर C++ की तरह maintain होने वाली वर्चुअल फ़ंक्शन टेबल को नहीं, बल्कि एक फ़िज़िकल मेमोरी को पॉइंट करते हैं, इसलिए अगर सिमुलेट किए गए फ़ंक्शन बहुत ज़्यादा हों तो इन्हें maintain करना मुश्किल हो जाता है।

पॉलीमॉर्फ़िज़्म सिमुलेट करने के लिए, फ़ंक्शन पॉइंटर वेरिएबल्स का अलाइनमेंट (कंटेंट में पूरी तरह समान और वेरिएबल अलाइनमेंट में भी पूरी तरह समान) बनाए रखना ज़रूरी है। वरना पैरेंट क्लास का पॉइंटर चाइल्ड क्लास के ऑब्जेक्ट को पॉइंट करते ही रनटाइम क्रैश!

सीखने के उदाहरण कोड के लिए देखें:c_examp.c

संबंधित विषय

टिप्पणियाँ