5. C++ OOP: Inheritance, Polymorphism & Virtual Functions
Comprehensive Guide: Derived classes, single/multiple inheritance, method overriding, virtual functions & abstract interfaces
Module 1: C++ Inheritance (Single & Multiple)
Reusing code properties from parent base classes to child derived classes.
🇬🇧 English Definition
Inheritance is the mechanism by which a child derived class inherits fields and methods from a parent base class.
🇮🇳 Hinglish Definition
Inheritance se child class parent class ke saare properties aur methods ko aage use kar sakti hai bina code repeat kiye.
Core Concepts & Rules
- Syntax: class DerivedClass : public BaseClass { ... }
- Multiple Inheritance: class Child : public Parent1, public Parent2 { ... }
🔍 Line-by-Line Code Breakdown
- Line 1-5: Define Base class Animal with eat() method.
- Line 7-11: Define Derived class Dog inheriting public Animal with bark() method.
- Line 14-16: Dog object d1 calls both eat() and bark().
using namespace std;
class Animal {
public:
void eat() { cout << "Animal is eating..." << endl; }
};
class Dog : public Animal {
public:
void bark() { cout << "Dog is barking!" << endl; }
};
int main() {
Dog d1;
d1.eat(); // Inherited method
d1.bark(); // Child method
return 0;
}
Module 2: Virtual Functions & Runtime Polymorphism
Late binding function calls using base class pointers.
🇬🇧 English Definition
A Virtual Function is a member function in a base class declared with the 'virtual' keyword, overridden in derived classes, resolving calls dynamically at runtime.
🇮🇳 Hinglish Definition
Virtual Function se runtime par decide hota hai ki base class pointer hone par bhi child class ka method run hoga (Runtime Polymorphism).
Core Concepts & Rules
- Declare with virtual keyword in Base class: virtual void makeSound()
- Override keyword in Derived class: void makeSound() override
- Pure Virtual Function: virtual void draw() = 0; creates an Abstract Class.
🔍 Line-by-Line Code Breakdown
- Line 3: Base Shape class with virtual void draw().
- Line 8: Derived Circle class overriding draw().
- Line 13-14: Shape pointer ptr = new Circle(); ptr->draw() calls Circle::draw() due to virtual dynamic binding!
using namespace std;
class Shape {
public:
virtual void draw() { cout << "Drawing generic shape" << endl; }
};
class Circle : public Shape {
public:
void draw() override { cout << "Drawing Circle by Instructor!" << endl; }
};
int main() {
Shape *ptr = new Circle();
ptr->draw(); // Calls Circle::draw()
delete ptr;
return 0;
}