आप सभी को C ++ में वंशानुक्रम के बारे में जानना होगा



यह लेख आपको C ++ में Inheritance का विस्तृत और व्यापक ज्ञान प्रदान करेगा, यह विभिन्न प्रकार है और इसे कैसे लागू किया जाए।

C ++ एक ऑब्जेक्ट-ओरिएंटेड भाषा है। डेटा अमूर्तता, बहुरूपता, एनकैप्सुलेशन और वंशानुक्रम OOP के आधार हैं। इस पोस्ट में, हम समझेंगे कि उत्तराधिकार क्या है? सी ++ में विरासत के प्रकार, और खरोंच से संबंधित सभी आवश्यक अवधारणाएं। अंत में, हम इस शक्तिशाली अवधारणा की कमियां भी देखेंगे और इसे हल करने का प्रयास करेंगे।

C ++ में Inheritance क्या है

वंशानुक्रम C ++ या किसी अन्य ऑब्जेक्ट-ओरिएंटेड भाषा में सबसे शक्तिशाली और व्यापक रूप से उपयोग की जाने वाली अवधारणाओं में से एक है। इस अवधारणा को समझने के लिए कक्षाओं और वस्तुओं का थोड़ा ज्ञान आवश्यक है। इनहेरिटेंस का उपयोग करके, हम एक वर्ग बना सकते हैं जिसमें सामान्य विधियाँ और विशेषताएँ होती हैं। इस वर्ग को अन्य वर्गों द्वारा विरासत में दिया जा सकता है जिसमें अधिक विशिष्ट विधियां हैं।





C ++ में निहित

ऐसा करने से हमें बार-बार वही कार्यक्षमताएँ नहीं लिखनी पड़ती हैं जिससे समय की बचत होती है और कोड की पठनीयता बढ़ती है।



वाक्य - विन्यास:

वर्ग व्युत्पन्न_क्लास: access_type base_class {// वर्ग निकाय}

आधार वर्ग: जिस कक्षा में सभी सामान्य विधियाँ और विशेषताएँ होती हैं, जिन्हें कोड पठनीयता बढ़ाने के लिए अन्य वर्गों द्वारा साझा किया जा सकता है, उन्हें आधार वर्ग कहा जाता है।

व्युत्पन्न वर्ग: जिस वर्ग में अधिक विशिष्ट विधियाँ होती हैं और किसी वर्ग को विरासत में लिया जाता है उसे व्युत्पन्न वर्ग कहा जाता है। एक व्युत्पन्न वर्ग कुछ अन्य व्युत्पन्न वर्ग के लिए एक आधार वर्ग भी हो सकता है।



यदि हम कुछ विशेषताओं और विधियों के साथ एक वर्ग XYZ बनाते हैं। अब एक कक्षा के छात्र के पास कुछ अन्य विशेषताएं होंगी, लेकिन इसमें XYZ वर्ग के तत्व भी शामिल होंगे और एक संकाय वर्ग के लिए भी यही होगा। आइए एक चित्र देखें:

दशमलव जावा कोड के लिए द्विआधारी

तो, छात्र और संकाय वर्ग XYZ से विरासत में मिलेगा।

एक्सेस स्पेसियर- हम समझ गए कि एक वर्ग दूसरे वर्ग को कैसे विरासत में दे सकता है। लेकिन कुछ लोग कह सकते हैं कि यह एक असुरक्षित विधि है, क्योंकि आधार वर्ग या अभिभावक वर्ग की सभी विशेषताओं और विधियों को बाल वर्ग या व्युत्पन्न वर्ग के साथ साझा किया जाता है। उदाहरण के लिए, यदि एक वर्ग ’बैंक’ को ’ग्राहकों’ और ’निवेशकों’ से विरासत में मिला है। वर्ग 'बैंक' की विशेषताएँ जैसे कि 'वॉल्टपासवर्ड', अन्य ग्राहक-संबंधी जानकारी और निजी डेटा को 'ग्राहकों' और 'निवेशकों' वर्ग के साथ साझा किया जाता है जो असुरक्षित है।

उपरोक्त समस्या को हल करने के लिए बेस क्लास विशेषताओं की पहुँच को व्युत्पन्न वर्ग तक सीमित करने के लिए सी ++ एक्सेस एक्सेसर्स का उपयोग करता है। C ++ में कुल 3 प्रकार के एक्सेस स्पेसियर हैं

  1. सह लोक
  2. निजी
  3. संरक्षित

नीचे दी गई तालिका आपको एक अच्छी समझ देगी कि किस प्रकार के डेटा को अलग-अलग एक्सेस स्पेसियर्स के अनुसार व्युत्पन्न वर्ग द्वारा एक्सेस किया जा सकता है।

पहुँच विनिर्देशक सार्वजनिक डेटा निजी डेटा संरक्षित डेटा
निजी इनहेरिट नहीं किया गयाइनहेरिट नहीं किया गयाइनहेरिट नहीं किया गया
संरक्षित संरक्षित निजी संरक्षित
सह लोक सह लोक निजी संरक्षित

एकल वंशानुक्रम

एकल वंशानुक्रम को वंशानुक्रम के सादे वेनिला रूप के रूप में माना जा सकता है। सिंगल इनहेरिटेंस में, बेस क्लास से सिंगल क्लास विरासत में मिलती है।

# नामस्थान std वर्ग ट्रेन का उपयोग करके अलग करें {int नंबरऑफ़व्हील्स int नंबरऑफ़्कोस पब्लिक: void Traininfo (int n, int m) {नंबरऑफ़व्हील्स = n नंबरोफ़ॉचेस = m} शून्य शोफ़िशो () {cout<वंशानुक्रम के इस मामले को बहुस्तरीय विरासत कहा जाता है। प्रथम और अंतिम वर्ग के बीच के वर्ग को मध्यवर्ती आधार वर्ग के रूप में भी जाना जाता है।आपको क्या लगता है, क्या अंतिम वर्ग पहली श्रेणी के सदस्यों को विरासत में दे सकता है? हाँ, यह कर सकते हैं

# नाम स्थान std वर्ग का उपयोग करके पहले {संरक्षित: int एक जनता: शून्य getinfofirst (int x) {a = x} शून्य showinfofirst () {std :: cout<< 'Value of a = ' < 

आउटपुट:

A = 10 का मान

बी = 20 का मान

C = 30 का मान

D = 50 का मान

पदानुक्रमित वंशानुक्रम

एकल या बहुस्तरीय विरासत की मदद से कुछ समस्याओं को हल नहीं किया जा सकता है। पदानुक्रमित विरासत में, 1 से अधिक वर्ग एक ही आधार वर्ग से विरासत में मिले।

# नामस्थान std क्लास कॉलेज {public: College () {cout का उपयोग कर निकालें<< 'We are in class College' << endl } } class Student: public College { } class Faculty: public College { } int main() { Student student Faculty faculty return 0 }

आउटपुट:

हम क्लास कॉलेज में हैं

हम क्लास कॉलेज में हैं

C ++ में मल्टीपल इनहेरिटेंस

हमने पदानुक्रमित विरासत में देखा कि एक आधार वर्ग में एक से अधिक व्युत्पन्न वर्ग थे। एकाधिक वंशानुक्रम में एक व्युत्पन्न वर्ग में एक से अधिक आधार वर्ग होते हैं।

# नाम छोड़कर std class One {संरक्षित: int public: void getinfoOne (int x) {a = x}} वर्ग दो {संरक्षित: int b public: void getinfoTwo (int y) [b = y}} वर्ग मुख्य: सार्वजनिक एक, सार्वजनिक दो {सार्वजनिक: शून्य प्रदर्शन () {std :: cout<< 'Value of a = ' < इस बिंदु पर, हमें C ++ में उपयोग की जाने वाली सभी प्रकार की विरासत की अच्छी समझ है। लेकिन, प्रतीक्षा करें कि क्या हम 2 अलग-अलग प्रकार की विरासत का उपयोग करना चाहते हैं? क्या यह संभव है? हाँ, यह संकर वंशानुक्रम की सहायता से संभव है। हाइब्रिड इनहेरिटेंस में, हम 2 अलग-अलग प्रकार की विरासत को मिलाते हैं। उदाहरण के लिए- बहुस्तरीय और कई विरासत, श्रेणीबद्ध और कई विरासत, आदि।

# नाम का उपयोग करके stp class विश्व {{संरक्षित: int a public: void getinfoWorld (int x) {a = x}} वर्ग महाद्वीप: public World {संरक्षित: int b public: void getinfoContinent (int y) {b = y}} वर्ग देश {संरक्षित: int d सार्वजनिक: शून्य getinfoCountry (int m) {d = m}} वर्ग ऑस्ट्रेलिया: सार्वजनिक महाद्वीप, सार्वजनिक देश {सार्वजनिक: शून्य प्रदर्शन () {std :: cout<< 'Value of a = ' < 

उपरोक्त आरेख को समझने दें जो हीरे की समस्या को समझने में हमारी मदद करेगा। क्लास बी और क्लास सी को क्लास ए से विरासत में मिला है इसलिए क्लास ए और क्लास बी दोनों में क्लास ए की विशेषताएं और तरीके हैं यदि क्लास डी क्लास बी के साथ-साथ क्लास सी से भी विरासत में मिला है। क्लास डी में क्लास बी और क्लास सी की सभी विशेषताएं होंगी। । इसमें क्लास ए के साथ-साथ क्लास सी से विरासत में मिली क्लास ए की सभी खूबियाँ भी हैं। इसलिए अगर हम क्लास डी की एक वस्तु बनाते हैं और क्लास ए की पद्धति को बुलाते हैं तो एक अस्पष्ट स्थिति पैदा हो जाएगी और कंपाइलर कहाँ से भ्रमित हो जाएगा। इसे कक्षा बी या कक्षा डी से ए की श्रेणी विधि चाहिए।

इस अस्पष्टता को हल करने के लिए हम वर्चुअल बेस क्लास नामक एक अवधारणा का उपयोग करते हैं। जब हम बेस क्लास को वर्चुअल बेस क्लास बनाते हैं तो वर्चुअल बेस क्लास और एक व्युत्पन्न क्लास के बीच मौजूदा रास्तों की संख्या की परवाह किए बिना उस क्लास की केवल एक कॉपी विरासत में मिलती है।

क्लास ए {} क्लास बी: वर्चुअल पब्लिक ए {} क्लास सी: वर्चुअल पब्लिक ए {} क्लास डी: पब्लिक सी, पब्लिक डी {}

इसके साथ, हम C ++ लेख में इस वंशानुक्रम के अंत में आते हैं। आप और अधिक जानने के लिए चाहते हैं, तो बाहर की जाँच करें Edureka, एक विश्वसनीय ऑनलाइन शिक्षण कंपनी है। एडुर्का के जावा जे 2 ईई और एसओए प्रशिक्षण और प्रमाणन पाठ्यक्रम आपको हाइबरनेट और स्प्रिंग जैसे विभिन्न जावा फ्रेमवर्क के साथ कोर और उन्नत जावा अवधारणाओं दोनों के लिए प्रशिक्षित करने के लिए डिज़ाइन किया गया है।

क्या आप हमसे कोई प्रश्न पूछना चाहते हैं? कृपया इस ब्लॉग के टिप्पणी अनुभाग में इसका उल्लेख करें और हम जल्द से जल्द आपके पास वापस आ जाएंगे।