Free tutorials & notes in Hindi & English · Clean code examples · Mobile friendly learning
📘 Lesson  ·  Lesson 72

Pure Virtual & Abstract Class

Written and reviewed by · Senior IT Faculty · 15+ years’ experience

Quick recap

A pure virtual function is a virtual function with no base implementation, and a class holding one is abstract. This page is a compact syntax reference; for the concept, interfaces, and a full worked example, see the main abstract classes lesson.

The = 0 syntax

Write the virtual function, then = 0 instead of a body. The = 0 is the "pure specifier":

C++
class Base {
public:
    virtual void run() = 0;    // pure virtual → Base is abstract
    virtual ~Base() {}
};

Pure virtual with a body

Unusually, a pure virtual can still have a definition, which derived classes may call explicitly. The class remains abstract:

C++
class Base {
public:
    virtual void log() = 0;    // still pure/abstract
};
void Base::log() {             // optional shared body
    cout << "[Base log]\n";
}
// Derived can call Base::log(); explicitly

Abstract vs concrete

Abstract classConcrete class
Has a pure virtual?Yes (≥1)No
Can instantiate?NoYes
RoleBase / interfaceUsable type

Derivation chains

If a derived class overrides only some inherited pure virtuals, it is still abstract:

C++
class A { public: virtual void f() = 0; virtual void g() = 0; };
class B : public A { public: void f() override {} };  // g() still pure → B abstract
class C : public B { public: void g() override {} };  // now concrete

When a class is abstract

  • It declares a pure virtual function (= 0), or
  • It inherits one and does not override it.

Either way, objects of that class cannot be created — only pointers/references. This underpins polymorphism and virtual functions.

Common mistakes

  • Putting = 0 on a non-virtual function (it must be virtual).
  • Assuming a partly-overridden derived class is concrete.
  • Trying to instantiate a class that still has an unimplemented pure virtual.
  • Forgetting the virtual destructor in the abstract base.
🏋️ Practice

Write an abstract Payment with pure virtual pay(double). Derive Card and Cash, implement pay in each, and call them through a Payment*.

Summary

  • Pure virtual syntax is virtual T f() = 0;.
  • A pure virtual may optionally have a body defined outside the class.
  • Abstract = has a pure virtual; concrete = fully implemented.
  • A partly-overridden subclass stays abstract.
  • For concept and examples, see the main abstract classes lesson.

त्वरित सार

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" है:

C++
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 रहती है:

C++
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 hai

Abstract बनाम concrete

Abstract classConcrete class
Pure virtual है?हाँ (≥1)नहीं
Instantiate कर सकते?नहींहाँ
भूमिकाBase / interfaceउपयोगी type

Derivation chains

अगर derived class केवल कुछ inherited pure virtuals override करे, यह अब भी abstract है:

C++
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 concrete

Class कब 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 कैसे लिखते हैं?
आप एक virtual function लिखते हैं और body की जगह = 0 assign करते हैं, जैसे virtual void draw() = 0;= 0 को pure specifier कहते हैं; यह function को बिना base implementation चिह्नित करता है और घेरने वाली class को abstract बनाता है।
क्या C++ में pure virtual function की body हो सकती है?
हाँ, असामान्य रूप से, pure virtual function को class के बाहर एक definition दी जा सकती है, भले यह = 0 से घोषित हो। Class abstract रहती है, पर derived classes उस साझा implementation को base-class scope से स्पष्ट रूप से call कर सकती हैं, जो कभी-कभी साझा default logic के लिए उपयोगी है।
C++ में abstract class और concrete class में क्या अंतर है?
Concrete class के सभी functions के implementations होते हैं और इसे instantiate किया जा सकता है। Abstract class में कम से कम एक बिना implementation pure virtual function होता है, तो इसे instantiate नहीं किया जा सकता और यह केवल एक base के रूप में काम करती है जिसे derived classes पूरा करती हैं।
क्या C++ में एक pure virtual function पूरी class को abstract बना देता है?
हाँ। Class उसी क्षण abstract बन जाती है जब उसमें एक भी pure virtual function हो, चाहे वहाँ घोषित हो या बिना override किए inherit हुआ हो। वह एक = 0 class के objects बनाने से रोकने को काफ़ी है।
C++ में derived class को concrete कैसे बनाते हैं?
Derived class हर inherited pure virtual function को override करके concrete बनती है, हर एक को असली implementation देते हुए। अगर यह कुछ override करे पर सब नहीं, यह abstract रहती है और फिर भी instantiate नहीं हो सकती।
← Back to C++ Tutorial
🔗

Share this topic with a friend

यह topic किसी दोस्त को भेजें

Found it useful? Send it to a classmate learning the same thing.

अच्छा लगा? जो दोस्त यही सीख रहा है, उसे भेज दीजिए।