Abstract classes और pure virtual methods
pure virtual methods से interfaces परिभाषित करें और derived-class contracts लागू करें।
Abstract classes और pure virtual methods, CoddyKit पर C++ Academy का एक निःशुल्क पाठ है। यह 4 में से 3वाँ पाठ है। इस अध्ययन पथ के 3 तक कोई भी पाठ पूरा पढ़ना निःशुल्क है — इसके बाद CoddyKit PRO हर पाठ अनलॉक करता है, साथ ही अंतर्निर्मित कोड संपादक और चौबीसों घंटे एआई शिक्षक के साथ व्यावहारिक अभ्यास भी उपलब्ध कराता है। यह C++ Academy सीखने के मार्ग का हिस्सा है और आपकी प्रगति वेब तथा CoddyKit ऐप पर सिंक होती रहती है। C++ Academy पाठ्यक्रम में कुल 4 पाठ शामिल हैं।
अमूर्त वर्ग क्या है
एक अमूर्त वर्ग में कम-से-कम एक शुद्ध आभासी फलन होता है — जिसे = 0 से घोषित किया जाता है। आप इसे सीधे इंस्टैंशिएट नहीं कर सकते।
class Animal {
public:
virtual void speak() const = 0; // pure virtual
virtual ~Animal() = default;
};
// Animal a; // ERROR: cannot instantiateशुद्ध आभासी फलन
= 0 यह चिह्नित करता है कि फलन का कोई डिफ़ॉल्ट कार्यान्वयन नहीं है। वर्ग को इंस्टैंशिएट करने से पहले व्युत्पन्न वर्गों को इसे ओवरराइड करना होगा।
अंतरफलक का कार्यान्वयन
व्युत्पन्न वर्ग प्रत्येक शुद्ध आभासी फलन के लिए ठोस निकाय प्रदान करते हैं।
class Dog : public Animal {
public:
void speak() const override {
std::cout << "Woof!\n";
}
};
Dog d;
d.speak(); // Woof!अंतरफलक के रूप में अमूर्त वर्ग
केवल शुद्ध आभासी विधियों वाले अमूर्त वर्ग (और बिना डेटा सदस्यों के) अन्य भाषाओं के अंतरफलक की तरह काम करते हैं।
class Drawable {
public:
virtual void draw() const = 0;
virtual ~Drawable() = default;
};कार्यान्वयन और अंतरफलक का संयोजन
अमूर्त वर्गों में शुद्ध आभासी विधियाँ और ठोस विधियाँ दोनों हो सकती हैं। शुद्ध आभासी विधियाँ अनुबंध परिभाषित करती हैं; ठोस विधियाँ साझा व्यवहार देती हैं।
class Logger {
public:
void logInfo(const std::string& msg) { log("INFO", msg); }
void logError(const std::string& msg) { log("ERROR", msg); }
protected:
virtual void log(const std::string& level, const std::string& msg) = 0;
};डिफ़ॉल्ट निकाय वाला शुद्ध आभासी फलन
शुद्ध आभासी फलन का निकाय हो सकता है — यह डिफ़ॉल्ट के रूप में उपयोगी होता है, जिसे व्युत्पन्न वर्ग कॉल कर सकते हैं।
class Base {
public:
virtual void f() = 0;
};
void Base::f() {
std::cout << "default behavior\n";
}
class Derived : public Base {
public:
void f() override {
Base::f(); // call the default
std::cout << "extra\n";
}
};संकेतकों और संदर्भों के माध्यम से उपयोग
बहुरूपी कोड अमूर्त वस्तुओं को आधार प्रकार के संकेतकों या संदर्भों के माध्यम से रखता है।
void perform(const Animal& a) {
a.speak();
}कंटेनरों में रखना
वेक्टर अमूर्त प्रकारों को मान के रूप में नहीं रख सकते। संकेतकों का उपयोग करें — आम तौर पर स्मार्ट संकेतकों का।
std::vector<std::unique_ptr<Animal>> zoo;
zoo.push_back(std::make_unique<Dog>());
zoo.push_back(std::make_unique<Cat>());
for (auto& a : zoo) a->speak();अमूर्त वर्गों का उपयोग कब करें
इनका उपयोग तब करें जब:
- आप कई असंबंधित कार्यान्वयनों के लिए साझा अंतरफलक परिभाषित करना चाहते हों
- आपको बहुरूपी कंटेनरों के लिए आधार प्रकार चाहिए
- आप उपवर्गों के माध्यम से व्यवहार प्रविष्ट करना चाहते हों (टेम्पलेट विधि प्रतिमान)
विकल्प: Concepts और Templates
संकलन-समय बहुरूपता के लिए, C++20 के कॉन्सेप्ट और टेम्पलेट अक्सर अमूर्त वर्गों का स्थान ले लेते हैं — रनटाइम लागत शून्य होती है। जब रनटाइम पर बहुरूपता आवश्यक हो, तब आभासी फलनों का उपयोग करें।
सावधानी: स्लाइसिंग
अमूर्त वर्गों को संदर्भ या संकेतक से दें। मान द्वारा देना वैसे भी संभव नहीं है (अमूर्त प्रकार को इंस्टैंशिएट नहीं किया जा सकता) — लेकिन व्युत्पन्न वर्गों को मान द्वारा देने पर उनका भाग कट जाएगा।
त्वरित जाँच
C++ में किसी वर्ग को अमूर्त क्या बनाता है?
पुनरावलोकन
अमूर्त वर्ग — जिनमें कम-से-कम एक शुद्ध आभासी विधि होती है — बहुरूपी कोड के लिए अंतरफलक परिभाषित करते हैं। व्यवहार को रनटाइम पर डिस्पैच करने के लिए इनका उपयोग संकेतकों या संदर्भों (अक्सर स्मार्ट संकेतकों) के साथ करें।
एआई शिक्षक के साथ C++ सीखें — निःशुल्क
अपने ब्राउज़र में वास्तविक कोड लिखें और चलाएँ, चौबीसों घंटे एआई शिक्षक से तुरंत सहायता पाएँ, और वेब या ऐप पर वहीं से शुरू करें जहाँ आपने छोड़ा था।
- पाठ्यक्रम
- 51
- पाठ
- 203
अक्सर पूछे जाने वाले प्रश्न
क्या “Abstract classes और pure virtual methods” पाठ निःशुल्क है?
हाँ — C++ Academy अध्ययन पथ के 3 तक कोई भी पाठ, जिसमें “Abstract classes और pure virtual methods” भी शामिल है, यहाँ वेब पर पूरा पढ़ना निःशुल्क है। इसके बाद CoddyKit PRO हर पाठ अनलॉक करता है, साथ ही अंतर्निर्मित कोड संपादक और चौबीसों घंटे एआई शिक्षक के साथ इंटरैक्टिव अभ्यास भी उपलब्ध कराता है। C++ Academy पाठ्यक्रम में कुल 4 पाठ शामिल हैं।
“Abstract classes और pure virtual methods” में मैं क्या सीखूँगा?
pure virtual methods से interfaces परिभाषित करें और derived-class contracts लागू करें। आप ब्राउज़र में सीधे चलाए जाने वाले व्यावहारिक कोड के साथ C++ Academy का अभ्यास करते हैं, और पाठ पूरा करते समय 24/7 एआई ट्यूटर आपके प्रश्नों के उत्तर देता है।
क्या C++ Academy शुरू करने के लिए मुझे किसी अनुभव की आवश्यकता है?
पहले के अनुभव की आवश्यकता नहीं है। CoddyKit पर C++ Academy शुरुआती से लेकर उन्नत शिक्षार्थियों तक सभी के लिए व्यवस्थित किया गया है, इसलिए आप यहीं से या शुरुआत से सीखना शुरू कर सकते हैं और अपनी गति से आगे बढ़ सकते हैं। यह 4 में से 3वाँ पाठ है।
“Abstract classes और pure virtual methods” पाठ पूरा करने में कितना समय लगता है?
CoddyKit का अधिकांश पाठ लगभग 5–10 मिनट में पूरा हो जाता है। हर पाठ छोटा और संवादात्मक है, इसलिए आप लगातार प्रगति करते हैं और वेब या ऐप पर वहीं से सीखना जारी रख सकते हैं जहाँ आपने छोड़ा था।
क्या मैं इस C++ Academy पाठ में कोड लिख और चला सकता हूँ?
हाँ। हर C++ Academy पाठ में एक अंतर्निर्मित कोड संपादक शामिल है, जिससे आप सीधे अपने ब्राउज़र में वास्तविक कोड लिख और चला सकते हैं और तुरंत एआई प्रतिक्रिया पा सकते हैं—स्थानीय सेटअप की आवश्यकता नहीं है।
इस पाठ्यक्रम के सभी पाठ
- एकल और बहु inheritance
- वर्चुअल फ़ंक्शन और वर्चुअल फ़ंक्शन तालिका
- Abstract classes और pure virtual methods
- Inheritance बनाम composition: समझौते