Pure Virtual & Abstract Class
त्वरित सार
Pure virtual function एक virtual function है जिसका base implementation नहीं, और इसे रखने वाली class abstract है। यह पृष्ठ एक संक्षिप्त syntax reference है; concept, interfaces, और पूरे चलते उदाहरण के लिए, मुख्य abstract classes lesson देखें।
= 0 syntax
Virtual function लिखें, फिर body की जगह = 0। = 0 "pure specifier" है:
class Base {
public:
virtual void run() = 0; // pure virtual → Base abstract hai
virtual ~Base() {}
};Body के साथ pure virtual
असामान्य रूप से, pure virtual की फिर भी एक definition हो सकती है, जिसे derived classes स्पष्ट रूप से call कर सकती हैं। Class abstract रहती है:
class Base {
public:
virtual void log() = 0; // phir bhi pure/abstract
};
void Base::log() { // optional shared body
cout << "[Base log]\n";
}
// Derived, Base::log(); explicitly call kar sakti haiAbstract बनाम concrete
| Abstract class | Concrete class | |
|---|---|---|
| Pure virtual है? | हाँ (≥1) | नहीं |
| Instantiate कर सकते? | नहीं | हाँ |
| भूमिका | Base / interface | उपयोगी type |
Derivation chains
अगर derived class केवल कुछ inherited pure virtuals override करे, यह अब भी abstract है:
class A { public: virtual void f() = 0; virtual void g() = 0; };
class B : public A { public: void f() override {} }; // g() abhi pure → B abstract
class C : public B { public: void g() override {} }; // ab concreteClass कब abstract है
- यह एक pure virtual function घोषित करती है (
= 0), या - यह एक inherit करती है और override नहीं करती।
किसी भी तरह, उस class के objects नहीं बन सकते — केवल pointers/references। यह polymorphism और virtual functions का आधार है।
आम गलतियाँ
- Non-virtual function पर
= 0लगाना (यहvirtualहोना चाहिए)। - आंशिक-override derived class को concrete मानना।
- ऐसी class instantiate करने की कोशिश जिसमें अब भी बिना implementation pure virtual हो।
- Abstract base में virtual destructor भूलना।
एक abstract Payment लिखें जिसमें pure virtual pay(double) हो। Card और Cash derive करें, हर एक में pay implement करें, और Payment* के ज़रिए call करें।
सारांश
- Pure virtual syntax
virtual T f() = 0;है। - Pure virtual की वैकल्पिक रूप से class के बाहर एक body परिभाषित हो सकती है।
- Abstract = pure virtual है; concrete = पूरी तरह implemented।
- आंशिक-override subclass abstract रहती है।
- Concept और उदाहरणों के लिए, मुख्य abstract classes lesson देखें।
अक्सर पूछे जाने वाले प्रश्न (FAQ)
C++ में pure virtual function कैसे लिखते हैं?
= 0 assign करते हैं, जैसे virtual void draw() = 0;। = 0 को pure specifier कहते हैं; यह function को बिना base implementation चिह्नित करता है और घेरने वाली class को abstract बनाता है।क्या C++ में pure virtual function की body हो सकती है?
= 0 से घोषित हो। Class abstract रहती है, पर derived classes उस साझा implementation को base-class scope से स्पष्ट रूप से call कर सकती हैं, जो कभी-कभी साझा default logic के लिए उपयोगी है।C++ में abstract class और concrete class में क्या अंतर है?
क्या C++ में एक pure virtual function पूरी class को abstract बना देता है?
= 0 class के objects बनाने से रोकने को काफ़ी है।