virtual enables runtime polymorphism: calling the most-derived override through a base pointer or reference.
Virtual functions
class Shape {
public:
virtual double area() const = 0; // pure virtual
virtual ~Shape() = default;
};
Pure virtual (= 0) makes the class abstract. Always give polymorphic bases a virtual destructor.
Important interview questions and answers
- Q: vtable cost?
A: One pointer per object plus indirect call—acceptable for extensibility; avoid on hot inner loops if profiling shows issue. - Q: override keyword?
A: C++11overridecatches signature mistakes at compile time.
Self-check
- Why virtual destructor on base classes?
- What makes a class abstract?
Tip: Always give polymorphic bases a virtual ~Base() = default;—otherwise deleting through base pointer leaks derived state.
Interview prep
- Why virtual destructor?
Deleting a derived object through a base pointer requires the derived destructor to run.
- Pure virtual (= 0)?
Makes the class abstract—derived classes must implement the function.