सी ++ वंशानुक्रम

C Inheritance



विरासत वस्तु-उन्मुख प्रोग्रामिंग की एक बहुत ही महत्वपूर्ण विशेषता है। यह प्रोग्रामर को मौजूदा वर्ग से एक वर्ग प्राप्त करने की अनुमति देता है। यह विशेष रूप से एक बड़ी जटिल परियोजना में बहुत उपयोगी है क्योंकि यह प्रोग्रामर को कोड का पुन: उपयोग करने की अनुमति देता है।

इस लेख में, हम C++ प्रोग्रामिंग में इनहेरिटेंस कॉन्सेप्ट पर चर्चा करने जा रहे हैं। हम C++ में फ्रेंड फंक्शन के कॉन्सेप्ट को वर्किंग उदाहरणों के साथ समझाएंगे।







विरासत क्यों?

वंशानुक्रम किसी अन्य वर्ग या आधार वर्ग से एक नया वर्ग या व्युत्पन्न वर्ग बनाने की अनुमति देता है। व्युत्पन्न वर्ग या बाल वर्ग में मूल वर्ग या आधार वर्ग की सभी विशेषताएं होंगी। हम इनहेरिटेंस की मदद से कोड का दोबारा इस्तेमाल कर सकते हैं।



वंशानुक्रम का प्रकार

विरासत के विभिन्न प्रकार हैं:



  1. सरल/एकल वंशानुक्रम
  2. पदानुक्रमित विरासत
  3. बहुस्तरीय विरासत
  4. एकाधिक वंशानुक्रम

इस लेख में, हम केवल साधारण/एकल वंशानुक्रम पर विचार करने जा रहे हैं।





उदाहरण 1:

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

#शामिल

नेमस्पेस एसटीडी का उपयोग करना;

क्लास बेस_क्लास
{
सह लोक:
NSमैं;
शून्यप्रदर्शन()
{
लागत<< 'आधार वर्ग का प्रदर्शन' <<मैं<<एंडली;
}

};

वर्ग Derived_Class:सार्वजनिक बेस_क्लास
{
सह लोक:
शून्यप्रदर्शन()
{
लागत<< 'व्युत्पन्न वर्ग का प्रदर्शन' <<एंडली;
}
};

NSमुख्य()
{
Derived_Class dc;
डीसीमैं = 100;
डीसीप्रदर्शन();
डीसीप्रदर्शन();

वापसी 0;
}



उदाहरण 2:

यह सी ++ में विरासत का एक और उदाहरण है। इस उदाहरण में, हम यह देखने जा रहे हैं कि जब एक व्युत्पन्न वर्ग वस्तु बनाई जाती है तो कंस्ट्रक्टर्स को कैसे कहा जाता है।

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

#शामिल
नेमस्पेस एसटीडी का उपयोग करना;

क्लास बेस_क्लास
{
सह लोक:
बेस_क्लास()
{
लागत<< 'बेस_क्लास - कोई पैरामीटर नहीं' <<एंडली;
}
बेस_क्लास(NSएक्स)
{
लागत<< 'बेस_क्लास - पैरामीटर्स:' <<एक्स<<एंडली;
}
};

वर्ग Derived_Class:सार्वजनिक बेस_क्लास
{
सह लोक:
व्युत्पन्न_वर्ग()
{
लागत<< 'व्युत्पन्न_क्लास - कोई पैरामीटर नहीं' <<एंडली;
}
व्युत्पन्न_वर्ग(NSतथा)
{
लागत<< 'व्युत्पन्न_क्लास - पैरामीटर्स:' <<तथा<<एंडली;
}
व्युत्पन्न_वर्ग(NSएक्स,NSतथा):बेस_क्लास(एक्स)
{
लागत<< 'Derived_Class का परम:' <<तथा<<एंडली;
}
};

NSमुख्य()
{
Derived_Class d(7,19);
}

उदाहरण 3:

इस उदाहरण में, हम देखेंगे कि व्युत्पन्न वर्ग वस्तुओं का उपयोग कैसे किया जा सकता है।

जैसा कि आप देख सकते हैं, दो वर्ग परिभाषित हैं: Rectangle_Class और Cube_Class। Rectangle_Class वह आधार वर्ग है जिससे व्युत्पन्न वर्ग, यानी Cube_Class व्युत्पन्न होता है। इसलिए, हम Rectangle_Class से Cube_Class तक की सुविधाओं को इनहेरिट कर रहे हैं।

साथ ही, आप देख सकते हैं कि हम सार्वजनिक अभिगम नियंत्रण के साथ Cube_Class को इनहेरिट कर रहे हैं। इसका मतलब है कि व्युत्पन्न वर्ग बेस क्लास के सभी गैर-निजी सदस्यों तक पहुंच सकता है।

हमने व्युत्पन्न वर्ग का एक ऑब्जेक्ट घोषित किया है, और फिर बेस क्लास, यानी, सेटलेंथ () और सेटब्रेड () से विधियों को कॉल करें।

#शामिल

नेमस्पेस एसटीडी का उपयोग करना;

वर्ग आयत_वर्ग
{
निजी:
NSलंबाई;
NSचौड़ाई;
सह लोक:
आयत_वर्ग();
आयत_वर्ग(NSNS,NSबी);
आयत_वर्ग(आयत_वर्गऔरआर);
NSलंबाई प्राप्त करें()
{
वापसीलंबाई;
}
NSचौड़ाई प्राप्त करें()
{
वापसीचौड़ाई;
}
शून्यसेट लंबाई(NSNS);
शून्यसेटचौड़ाई(NSबी);
NSक्षेत्र();
};

वर्ग Cube_Class:सार्वजनिक आयत_वर्ग
{
निजी:
NSऊंचाई;
सह लोक:
Cube_Class(NSएच)
{
ऊंचाई=एच;
}
NSऊंचाई प्राप्त करें()
{
वापसीऊंचाई;
}
शून्यसेट हाइट(NSएच)
{
ऊंचाई=एच;
}
NSआयतन()
{
वापसीलंबाई प्राप्त करें()*चौड़ाई प्राप्त करें()*ऊंचाई;
}
};


आयत_वर्ग::आयत_वर्ग()
{
लंबाई=1;
चौड़ाई=1;
}
आयत_वर्ग::आयत_वर्ग(NSNS,NSबी)
{
लंबाई=NS;
चौड़ाई=बी;
}
आयत_वर्ग::आयत_वर्ग(आयत_वर्गऔरआर)
{
लंबाई=आर।लंबाई;
चौड़ाई=आर।चौड़ाई;
}
शून्यआयत_वर्ग::सेट लंबाई(NSNS)
{
लंबाई=NS;
}
शून्यआयत_वर्ग::सेटचौड़ाई(NSबी)
{
चौड़ाई=बी;
}
NSआयत_वर्ग::क्षेत्र()
{
वापसीलंबाई*चौड़ाई;
}

NSमुख्य()
{
Cube_Class c(8);
सी।सेट लंबाई(12);
सी।सेटचौड़ाई(9);
लागत<<'वॉल्यूम है'<<सी।आयतन()<<एंडली;
}

निष्कर्ष:

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