मुख्य सामग्री पर जाएं
मॉड्यूल 6 · पाठ 1 का 2पाठ्यक्रम में 13/18~12 min
मॉड्यूल पाठ (1/2)

C++ में वंशानुक्रम

विरासत ऑब्जेक्ट-ओरिएंटेड प्रोग्रामिंग (ओओपी) के प्रमुख स्तंभों में से एक है। यह एक नए वर्ग (जिसे व्युत्पन्न या चाइल्ड वर्ग कहा जाता है) को मौजूदा वर्ग (जिसे आधार या मूल वर्ग कहा जाता है) से सदस्यों (विशेषताओं और विधियों) को प्राप्त करने की अनुमति देता है, जिससे कोड के पुन: उपयोग को बढ़ावा मिलता है।

मूल सिंटेक्स

C++ में, वंशानुक्रम को व्युत्पन्न वर्ग नाम के बाद : ऑपरेटर का उपयोग करके निर्दिष्ट किया जाता है, इसके बाद एक एक्सेस विनिर्देशक (आमतौर पर public) और बेस क्लास नाम होता है।

C++
class Shape {
public:
    void setColor(std::string c) {
        color = c;
    }
protected:
    std::string color; // Accessible by derived classes
};

// Rectangle inherits publicly from Shape
class Rectangle : public Shape {
public:
    double getArea() {
        return width * height;
    }
private:
    double width {0.0};
    double height {0.0};
};

एक्सेस विनिर्देशक: protected

public और private के साथ, इनहेरिटेंस protected विनिर्देशक का परिचय देता है:

  • बेस क्लास के private सदस्यों को व्युत्पन्न क्लास से सीधे नहीं एक्सेस किया जा सकता है।
  • protected बेस क्लास के सदस्य बाहर से पहुंच योग्य नहीं हैं, लेकिन व्युत्पन्न कक्षाओं के अंदर सीधे पहुंच योग्य हैं।

बेस क्लास आरंभीकरण

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

C++
class Parent {
public:
    Parent(int x) {
        std::cout << "Parent: " << x << std::endl;
    }
};

class Child : public Parent {
public:
    // Explicit call to Parent constructor
    Child(int x, int y) : Parent(x) {
        std::cout << "Child: " << y << std::endl;
    }
};

खुद कोशिश करना

व्यायाम#cpp.m6.l1.e1
प्रयास: 0लोड हो रहा है...

एक डॉग क्लास बनाएं जो सार्वजनिक रूप से एनिमल क्लास से विरासत में मिले। डॉग क्लास में एक सार्वजनिक प्ले() विधि शामिल होनी चाहिए जो std::cout का उपयोग करके 'प्लेइंग' प्रिंट करती है।

संपादक लोड हो रहा है...
संकेत दिखाएँ

बेस क्लास का विस्तार करने के लिए `:` सिंटैक्स का उपयोग करें और उसके बाद `पब्लिक एनिमल` का उपयोग करें, फिर `प्ले()` विधि लिखें।

3 प्रयासों के बाद समाधान उपलब्ध है

व्यायाम#cpp.m6.l1.e2
प्रयास: 0लोड हो रहा है...

वाहन से विरासत में प्राप्त करके कार वर्ग को पूरा करें। कार के लिए एक कंस्ट्रक्टर लिखें जो std::string b को स्वीकार करता है और इसे सदस्य इनिशियलाइज़र सूची के माध्यम से वाहन कंस्ट्रक्टर को भेजता है।

संपादक लोड हो रहा है...
संकेत दिखाएँ

`कार` कंस्ट्रक्टर में, बेस क्लास में ब्रांड के आरंभीकरण को सौंपने के लिए पैरामीटर कोष्ठक के तुरंत बाद सिंटैक्स `: व्हीकल (बी)` का उपयोग करें।

3 प्रयासों के बाद समाधान उपलब्ध है