C++ Notes Help

Abstract

Abstract Function

A pure virtual function is a virtual function that has no implementation in the base class and is declared using = 0.

Pure virtual function forces the derived classes to override it.

class Car { public: virtual void start() = 0; // Pure virtual function }; class Mercedes : public Car { public: void start() { cout << "Mercedes" << endl; } }; class Audi : public Car { public: void start() { cout << "Audi" << endl; } }; int main() { Car* p = new Mercedes(); p->start(); // "Mercedes" p = new Audi(); p->start(); // "Audi" }

Here we have generalized the two classes (Mercedes and Audi) to class Car.

Now, we are able to use start() function dynamically (run time binding of functions).

We can use the override keyword to explicitly state that a member function is intended to override a virtual function from a base class, allowing the compiler to verify this.

class Car { public: virtual void start() = 0; // Pure virtual function }; class Mercedes : public Car { public: void start() override { cout << "Mercedes" << endl; } }; class Audi : public Car { public: void start() override { cout << "Audi" << endl; } };

Abstract Class

It is a class that has atleast one pure virtual function. It can also have concrete functions.

  • We cannot create a object of abstract class.

  • But pointer of abstract class can be created.

  • Pointer of abstract class can hold object of derived class.

A derived class needs to override pure virtual functions of base class, otherwise it will also become a abstract class.

class Base { public: virtual void read() = 0; // Pure virtual function virtual void write() = 0; // Pure virtual function void speak() // Concrete function { cout << "Base Speak()" << endl; } }; class Derived : public Base { public: void read() override { cout << "Derived read()" << endl; } void write() override { cout << "Derived write()" << endl; } }; int main() { Derived d; d.read(); // Derived read() d.write(); // Derived write() d.speak(); // Base speak() }

Interface

An interface in C++ is an abstract class that defines a contract using only pure virtual functions, leaving all implementation details to derived classes.

class Base { public: virtual void read() = 0; // Pure Virtual function virtual void write() = 0; // Pure Virtual function virtual void speak() = 0; // Pure Virtual function }; class Derived : public Base { public: void read() override { cout << "Derived read()" << endl; } void write() override { cout << "Derived write()" << endl; } void speak() override { cout << "Derived speak()" << endl; } }; int main() { Derived d; d.read(); // Derived read() d.write(); // Derived write() d.speak(); // Derived speak() }

Types of Base classes

Base Class with ...

Abstract Class ?

Main Purpose

Common Name

All concrete functions

❌ No

Code reuse via inheritance

Concrete base class

Some concrete + some pure virtual functions

✅ Yes

Code reuse and runtime polymorphism

Abstract class

All pure virtual functions

✅ Yes

Runtime polymorphism, defining contracts

Interface (by convention)

Last modified: 08 February 2026