इस ट्यूटोरियल में, हम उदाहरणों की मदद से C ++ में विरासत के बारे में जानेंगे।
वंशानुक्रम C ++ में ऑब्जेक्ट-ओरिएंटेड प्रोग्रामिंग की प्रमुख विशेषताओं में से एक है। यह हमें एक मौजूदा वर्ग (बेस क्लास) से एक नया वर्ग (व्युत्पन्न वर्ग) बनाने की अनुमति देता है।
व्युत्पन्न वर्ग बेस क्लास से सुविधाओं को प्राप्त करता है और इसकी अपनी अतिरिक्त विशेषताएं हो सकती हैं। उदाहरण के लिए,
class Animal ( // eat() function // sleep() function ); class Dog : public Animal ( // bark() function );
यहाँ, Dog
वर्ग को वर्ग से लिया गया है Animal
। चूंकि Dog
से लिया गया है Animal
, के सदस्यों के Animal
लिए सुलभ हैं Dog
।
![](https://cdn.wiki-base.com/8141271/c_inheritance.png.webp)
public
डॉग को एनिमल से विरासत में प्राप्त करते समय कीवर्ड के उपयोग पर ध्यान दें ।
class Dog : public Animal (… );
हम यह भी कीवर्ड का उपयोग कर सकते private
हैं और protected
के बजाय public
। हम का उपयोग कर के बीच मतभेदों के बारे में सीखना होगा private
, public
और protected
बाद में इस ट्यूटोरियल में।
एक रिश्ता है
विरासत एक रिश्ता है । हम इनहेरिटेंस का उपयोग केवल तभी करते हैं जब दोनों वर्गों के बीच एक-एक संबंध मौजूद हो।
यहां कुछ उदाहरण दिए गए हैं:
- एक कार एक वाहन है।
- संतरा एक फल है।
- एक सर्जन एक डॉक्टर है।
- कुत्ता एक जानवर है।
उदाहरण 1: C ++ वंशानुक्रम का सरल उदाहरण
// C++ program to demonstrate inheritance #include using namespace std; // base class class Animal ( public: void eat() ( cout << "I can eat!" << endl; ) void sleep() ( cout << "I can sleep!" << endl; ) ); // derived class class Dog : public Animal ( public: void bark() ( cout << "I can bark! Woof woof!!" << endl; ) ); int main() ( // Create object of the Dog class Dog dog1; // Calling members of the base class dog1.eat(); dog1.sleep(); // Calling member of the derived class dog1.bark(); return 0; )
आउटपुट
मैं खा सकता हूँ! मैं सो सकता हूँ! मैं भौंक सकता हूं! वूफ वूफ!!
यहां, dog1 (व्युत्पन्न वर्ग का ऑब्जेक्ट Dog
) बेस क्लास के सदस्यों तक पहुंच सकता है Animal
। यह इसलिए Dog
है क्योंकि इससे विरासत में मिला है Animal
।
// Calling members of the Animal class dog1.eat(); dog1.sleep();
C ++ संरक्षित सदस्य
एक्सेस मोडिफायर protected
विशेष रूप से प्रासंगिक है जब यह C ++ वंशानुक्रम के लिए आता है।
private
सदस्यों की तरह , protected
सदस्य वर्ग के बाहर दुर्गम हैं। हालाँकि, उन्हें व्युत्पन्न वर्गों और मित्र वर्गों / कार्यों द्वारा पहुँचा जा सकता है ।
protected
यदि हम किसी वर्ग के डेटा को छिपाना चाहते हैं, तो हमें सदस्यों की आवश्यकता है , लेकिन फिर भी वह डेटा अपने व्युत्पन्न वर्गों द्वारा विरासत में प्राप्त करना चाहता है।
संरक्षित के बारे में अधिक जानने के लिए, हमारे C ++ एक्सेस संशोधक ट्यूटोरियल का संदर्भ लें।
उदाहरण 2: C ++ संरक्षित सदस्य
// C++ program to demonstrate protected members #include #include using namespace std; // base class class Animal ( private: string color; protected: string type; public: void eat() ( cout << "I can eat!" << endl; ) void sleep() ( cout << "I can sleep!" << endl; ) void setColor(string clr) ( color = clr; ) string getColor() ( return color; ) ); // derived class class Dog : public Animal ( public: void setType(string tp) ( type = tp; ) void displayInfo(string c) ( cout << "I am a " << type << endl; cout << "My color is " << c << endl; ) void bark() ( cout << "I can bark! Woof woof!!" << endl; ) ); int main() ( // Create object of the Dog class Dog dog1; // Calling members of the base class dog1.eat(); dog1.sleep(); dog1.setColor("black"); // Calling member of the derived class dog1.bark(); dog1.setType("mammal"); // Using getColor() of dog1 as argument // getColor() returns string data dog1.displayInfo(dog1.getColor()); return 0; )
आउटपुट
मैं खा सकता हूँ! मैं सो सकता हूँ! मैं भौंक सकता हूं! वूफ वूफ!! मैं एक स्तनधारी हूँ मेरा रंग काला है
यहां, चर प्रकार है protected
और इस प्रकार व्युत्पन्न वर्ग से सुलभ है Dog
। हम इसे देख सकते हैं क्योंकि हमने फंक्शन का उपयोग करके क्लास type
में इनिशियलाइज़ किया है ।Dog
setType()
दूसरी ओर, private
चर रंग को प्रारंभ नहीं किया जा सकता है Dog
।
class Dog : public Animal ( public: void setColor(string clr) ( // Error: member "Animal::color" is inaccessible color = clr; ) );
इसके अलावा, चूंकि protected
कीवर्ड डेटा छुपाता है, इसलिए हम किसी ऑब्जेक्ट Dog
या Animal
क्लास से सीधे टाइप नहीं कर सकते ।
// Error: member "Animal::type" is inaccessible dog1.type = "mammal";
C ++ इनहेरिटेंस में एक्सेस मोड
हमारे पिछले ट्यूटोरियल में, हमने सार्वजनिक, निजी और संरक्षित जैसे सी ++ एक्सेस स्पेसियर्स के बारे में सीखा है।
अब तक, हमने public
पहले से मौजूद आधार वर्ग से एक वर्ग प्राप्त करने के लिए कीवर्ड का उपयोग किया है । हालाँकि, हम कक्षाओं को इनहेरिट करने के लिए कीवर्ड private
और protected
कीवर्ड का भी उपयोग कर सकते हैं । उदाहरण के लिए,
class Animal ( // code ); class Dog : private Animal ( // code );
class Cat : protected Animal ( // code );
विभिन्न तरीके जिन्हें हम प्राप्त कर सकते हैं, उन्हें एक्सेस मोड के रूप में जाना जाता है । इन एक्सेस मोड का निम्न प्रभाव है:
- सार्वजनिक: यदि एक व्युत्पन्न वर्ग को
public
मोड में घोषित किया जाता है, तो आधार वर्ग के सदस्यों को व्युत्पन्न वर्ग द्वारा विरासत में दिया जाता है जैसे वे हैं। - निजी: इस मामले में, बेस क्लास के सभी सदस्य
private
व्युत्पन्न वर्ग के सदस्य बन जाते हैं। - संरक्षित:
public
आधार वर्ग बन के सदस्योंprotected
व्युत्पन्न वर्ग में सदस्य हैं।
private
आधार वर्ग के सदस्य हमेशा से रहे हैं private
व्युत्पन्न वर्ग में।
अधिक जानने के लिए, हमारे C ++ सार्वजनिक, निजी, संरक्षित विरासत ट्यूटोरियल पर जाएँ।
सदस्य समारोह इनहेरिटेंस में ओवरराइडिंग
मान लीजिए, आधार वर्ग और व्युत्पन्न वर्ग में समान नाम और तर्कों के साथ सदस्य कार्य हैं।
यदि हम व्युत्पन्न वर्ग का एक ऑब्जेक्ट बनाते हैं और उस सदस्य फ़ंक्शन तक पहुंचने का प्रयास करते हैं, तो व्युत्पन्न वर्ग में सदस्य फ़ंक्शन को बेस क्लास में एक के बजाय लागू किया जाता है।
व्युत्पन्न वर्ग का सदस्य फ़ंक्शन आधार वर्ग के सदस्य फ़ंक्शन को ओवरराइड करता है।
C ++ में फ़ंक्शन ओवरराइडिंग के बारे में अधिक जानें।
अनुशंसित पढ़ना: C ++ मल्टीपल इनहेरिटेंस