Free tutorials & notes in Hindi & English · Clean code examples 🧰 मुफ़्त PDF और फ़ोटो टूल्स →
🟣 OOP  ·  Lesson 49

Abstract Classes and Pure Virtual Functions

Abstract class क्या है?

Abstract class ऐसी class है जिसके objects आप सीधे नहीं बना सकते — यह केवल inherit होने को होती है। यह एक या ज़्यादा pure virtual functions घोषित करके एक साझा interface (derived classes को क्या करना है) तय करती है, और साझा code भी दे सकती है।

Pure virtual functions

Pure virtual function एक virtual function है जिसका base में कोई body नहीं, = 0 से चिह्नित। यह कहता है "हर concrete subclass को यह देना होगा":

C++
class Shape {
public:
    virtual double area() = 0;   // pure virtual → Shape abstract hai
    virtual ~Shape() {}          // virtual destructor
};

अकेला = 0 Shape को abstract बनाता है। Pure virtual के syntax विवरण के लिए, pure virtual & abstract syntax page देखें।

आप इसे instantiate नहीं कर सकते

C++
// Shape s;        // ERROR: abstract object nahi bana sakte
Shape *p;           // OK: Shape ka pointer theek hai

आप फिर भी Shape* pointers या references इस्तेमाल कर सकते हैं — वे concrete subclasses पर इशारा करते हैं।

एक चलता उदाहरण

C++
#include <iostream>
using namespace std;
class Shape {
public:
    virtual double area() = 0;      // pure virtual
    virtual ~Shape() {}
};
class Circle : public Shape {
    double r;
public:
    Circle(double x) : r(x) {}
    double area() override { return 3.14159 * r * r; }
};
class Rectangle : public Shape {
    double w, h;
public:
    Rectangle(double a, double b) : w(a), h(b) {}
    double area() override { return w * h; }
};
int main() {
    Shape *shapes[2] = { new Circle(2), new Rectangle(3, 4) };
    for (Shape *s : shapes) cout << s->area() << "\n";
    return 0;
}
Output:
12.5664
12

हर shape अपना area गिनता है, Shape* के ज़रिए एक समान call किया गया।

Interfaces के रूप में abstract classes

C++ में interface बस एक abstract class है जहाँ सभी functions pure virtual हों और कोई data न हो। यह एक शुद्ध अनुबंध परिभाषित करता है:

C++
class Drawable {
public:
    virtual void draw() = 0;
    virtual ~Drawable() {}
};   // draw() implement karne wali koi bhi class "Drawable" hai

मुख्य नियम

  • किसी भी pure virtual function वाली class abstract है।
  • Abstract class instantiate नहीं हो सकती, पर इसके pointers/references हो सकते हैं।
  • Derived class तब तक abstract रहती है जब तक वह सभी pure virtuals override न करे।
  • Abstract base को हमेशा virtual destructor दें।

आम गलतियाँ

  • Abstract class का object बनाने की कोशिश।
  • जिस class को concrete बनाना था उसमें pure virtual बिना implementation छोड़ना।
  • Abstract base में virtual destructor भूलना।
  • Abstract class (data/implemented methods हो सकते) को शुद्ध interface से भ्रमित करना।
🏋️ अभ्यास

एक abstract Animal परिभाषित करें जिसमें pure virtual sound() हो। Dog और Cow derive करें, हर एक में sound() implement करें, और Animal* के array के ज़रिए call करें।

सारांश

  • Abstract class में कम से कम एक pure virtual function होता है।
  • Pure virtual = 0 लिखा जाता है और इसका base body नहीं होता।
  • आप abstract class instantiate नहीं कर सकते, केवल इस पर इशारा कर सकते हैं।
  • Interface एक abstract class है जिसमें सब pure-virtual और कोई data न हो।
  • Subclass को concrete बनने को हर pure virtual override करना होगा।

अक्सर पूछे जाने वाले प्रश्न (FAQ)

C++ में abstract class क्या है?
Abstract class ऐसी class है जिसमें कम से कम एक pure virtual function हो और इसलिए इसे अपने आप instantiate नहीं किया जा सकता। यह base class बनने को होती है, एक साझा interface परिभाषित करते हुए जिसे derived classes को implement करना होगा, जबकि संभवतः कुछ साझा व्यवहार भी देते हुए।
C++ में pure virtual function क्या है?
Pure virtual function एक virtual function है जिसका base class में कोई implementation नहीं, = 0 लिखकर घोषित, जैसे virtual double area() = 0;। यह हर concrete derived class को अपना version देने पर मजबूर करता है, और इसकी मौजूदगी class को abstract बनाती है।
C++ में आप abstract class का object क्यों नहीं बना सकते?
क्योंकि abstract class में कम से कम एक function बिना implementation के होता है, compiler इससे पूर्ण, उपयोगी object नहीं बना सकता। आप फिर भी abstract type के pointers या references इस्तेमाल कर सकते हैं, जो concrete derived classes के objects पर इशारा करते हैं।
C++ में abstract class और interface में क्या अंतर है?
C++ में कोई अलग interface keyword नहीं; interface बस एक abstract class है जहाँ हर function pure virtual हो और कोई data न हो। सामान्य abstract class अपने pure virtual के साथ implemented functions और data members भी शामिल कर सकती है।
C++ में अगर derived class सभी pure virtual functions override न करे तो क्या होता है?
अगर derived class किसी inherited pure virtual function को बिना implementation छोड़े, वह derived class खुद abstract है और इसे भी instantiate नहीं किया जा सकता। केवल तब जब हर pure virtual function implement हो, class concrete और उपयोगी बनती है।
← Back to C++ Tutorial
🔗

Share this topic with a friend

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

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

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

💻 लाइव कोड एडिटर

इस पेज के प्रोग्राम यहीं तैयार हैं — चलाएँ, बदलें और सीखें। कुछ भी इंस्टॉल किए बिना।
OneCompiler द्वारा संचालित। कोड एडिटर में अपने आप आ जाता है — Run दबाकर आउटपुट देखें। अगर एडिटर न खुले तो नए टैब में खोलें.
अगला topicOperator Overloading आपकी प्रगति: 49 / 81 (60%) · Lesson 50 / 81 आगे बढ़ें →

यह lesson कैसा लगा?

आपकी राय से हम content और बेहतर बनाते हैं।

अपना review और सुझाव लिखें (वैकल्पिक)

Review approve होने के बाद आपका नाम और शहर इसके साथ public दिख सकते हैं। Email या phone न लिखें।

▶ CodingEasily on YouTube

Video से सीखें – आसान Hindi में

चुनी हुई video: RDBMS भाग 3 – Class XI Commerce IT

▶ Channel subscribe करें