🎨
Inheritance & Polymorphism

Abstract Classes & Pure Virtual Functions

Incomplete Blueprints
💡 Abstract class ek incomplete blueprint hai — jaise "Shape" ka generic naksha jisme "area calculate karo" likha hai lekin HOW nahi bataya (kyunki circle aur square ka area alag tarike se calculate hota hai). Iska khud ka ghar (object) nahi ban sakta, sirf specific blueprints (Circle, Square) ban sakte hain.

Pure virtual function ek virtual function hai jiska koi implementation nahi (= 0 se declare hota hai) — ye Base class ko "abstract" bana deta hai, jiska direct object nahi ban sakta. Har derived class ko us function ko implement karna ZAROORI hai, warna wo bhi abstract reh jaayegi.

Abstract classes ek "contract" define karte hain — "koi bhi Shape ho, use area() implement karna hi padega" — ye interfaces jaisa concept hai (Java ke interface ka C++ equivalent).

class Shape {
  public:
    virtual double area() = 0;   // pure virtual — koi implementation nahi
};

class Circle : public Shape {
  double radius;
  public:
    Circle(double r) : radius(r) {}
    double area() override { return 3.14159 * radius * radius; }  // implement karna zaroori
};

int main() {
  // Shape s;         // ERROR: abstract class ka object nahi ban sakta
  Circle c(5);
  cout << c.area() << endl;  // 78.5

  Shape *shape = new Circle(10);  // Base pointer, Derived object
  cout << shape->area() << endl;   // 314.159
  return 0;
}
🎨
Abstract class ek incomplete blueprint hai — jaise "Shape" ka generic naksha jisme "area calculate karo" likha hai lekin HOW nahi bataya (kyunki circle aur square ka area alag tarike se calculate hota hai). Iska khud ka ghar (object) nahi ban sakta, sirf specific blueprints (Circle, Square) ban sakte hain.
1 / 2
⚡ Quick Recap
  • = 0 se declare hone wala virtual function = pure virtual
  • Abstract class ka direct object nahi ban sakta
  • Ye ek "contract" hai — Java ke interface jaisa concept
Is page mein (1 subtopics)

C++ mein Java jaisa alag "interface" keyword nahi hai — uski jagah, ek class jisme SAARE functions pure virtual hon (koi data members bhi na hon), "pure abstract class" kehlati hai aur interface jaisa kaam karti hai.

class Drawable {   // interface jaisa — sab pure virtual
  public:
    virtual void draw() = 0;
    virtual void resize(double factor) = 0;
};

class Circle : public Drawable {
  public:
    void draw() override { cout << "Drawing circle\n"; }
    void resize(double factor) override { cout << "Resizing\n"; }
};