Top C++ Interview Questions and Answers
Try Aihirely for
Smarter Interview Prep
 Experience real-time AI support tailored to your Resume.
Boost your confidence and ace every question with
AI Mock Interview.
Question: What is an abstract class in C++?
Answer:
An abstract class in C++ is a class that cannot be instantiated directly. It is designed to be a base class for other derived classes and contains at least one pure virtual function. The primary purpose of an abstract class is to provide a common interface (set of functions) that other derived classes must implement.
Key Characteristics of an Abstract Class:
- 
Pure Virtual Functions: An abstract class contains at least one pure virtual function. A pure virtual function is declared by assigning
= 0to the function declaration. These functions have no implementation in the abstract class itself and must be implemented by the derived class.Example of a pure virtual function:
virtual void display() = 0; - 
Cannot be Instantiated: An abstract class cannot be instantiated directly. You cannot create an object of an abstract class.
// This will give a compilation error AbstractClass obj; // Error: cannot instantiate an abstract class - 
Derived Classes Must Implement Pure Virtual Functions: Any class that derives from an abstract class must provide implementations for all pure virtual functions, or it will also become an abstract class.
 - 
Constructors and Destructors: An abstract class can have constructors and destructors. If a constructor is defined, it can be used by derived classes, but the abstract class itself cannot be instantiated.
 - 
Polymorphism: Abstract classes are often used to implement polymorphism in C++, where different derived classes implement the same interface defined in the abstract class, and you can work with objects of derived classes through base class pointers or references.
 
Example of Abstract Class:
##include <iostream>
using namespace std;
// Abstract class
class Shape {
public:
    // Pure virtual function
    virtual void draw() = 0;  // This makes Shape an abstract class
};
// Derived class that implements the pure virtual function
class Circle : public Shape {
public:
    void draw() override {
        cout << "Drawing a circle" << endl;
    }
};
// Derived class that implements the pure virtual function
class Rectangle : public Shape {
public:
    void draw() override {
        cout << "Drawing a rectangle" << endl;
    }
};
int main() {
    // Shape obj;  // Error: cannot instantiate an abstract class
    Shape* shape1 = new Circle();
    shape1->draw();  // Output: Drawing a circle
    Shape* shape2 = new Rectangle();
    shape2->draw();  // Output: Drawing a rectangle
    delete shape1;
    delete shape2;
    return 0;
}
Output:
Drawing a circle
Drawing a rectangle
Key Points in the Example:
Shapeis an abstract class with a pure virtual functiondraw().- The derived classes 
CircleandRectangleprovide implementations for thedraw()function. - You cannot create an instance of 
Shapedirectly (e.g.,Shape obj;would give a compilation error), but you can create objects of derived classes likeCircleandRectangle. - You can use base class pointers or references to access the derived class objects (this is an example of polymorphism).
 
Summary:
- An abstract class in C++ is a class that contains at least one pure virtual function, making it impossible to instantiate directly.
 - It serves as a base class for derived classes to implement specific behavior, enforcing a common interface across different derived classes.
 - Abstract classes are widely used in object-oriented programming to define common interfaces and promote polymorphism.
 
Question: What is a virtual function in C++?
Answer:
A virtual function in C++ is a member function in a base class that you expect to be overridden in derived classes. When a function is declared as virtual in a base class, it ensures that the correct version of the function is called for an object, even when it is accessed through a pointer or reference to the base class. This feature is a key aspect of polymorphism in C++, allowing for dynamic binding (runtime function resolution).
Key Points About Virtual Functions:
- 
Dynamic Dispatch (Late Binding): When a function is declared as virtual, the function call is resolved at runtime rather than compile time. This is known as late binding or dynamic dispatch. The version of the function that gets called is determined by the actual object type, not the pointer or reference type.
 - 
Virtual Function Declaration: A function is declared virtual in the base class by using the
virtualkeyword. The derived classes can override this function, providing their own implementation.Example:
class Base { public: virtual void display() { // Virtual function in the base class cout << "Base class display function." << endl; } }; - 
Function Overriding: In the derived class, you can override the virtual function to provide specific behavior for the derived class. The
overridekeyword (optional but recommended) can be used to make sure that you’re actually overriding a base class virtual function.Example:
class Derived : public Base { public: void display() override { // Override the virtual function in the derived class cout << "Derived class display function." << endl; } }; - 
Virtual Destructor: A virtual destructor is important when you are working with inheritance and dynamic memory. It ensures that the destructor of the derived class is called when an object is deleted through a base class pointer.
Example:
class Base { public: virtual ~Base() { // Virtual destructor cout << "Base class destructor" << endl; } }; - 
Pure Virtual Function (Abstract Function): If you want to create an abstract class that forces derived classes to implement a function, you can use a pure virtual function by setting it equal to
0. This makes the function abstract and the class abstract, meaning objects of that class cannot be instantiated directly.Example:
class Base { public: virtual void display() = 0; // Pure virtual function }; - 
Virtual Table (Vtable): Under the hood, C++ compilers implement virtual functions using a mechanism called a virtual table (vtable). Each class with virtual functions has a vtable, which is an array of function pointers that points to the overridden versions of the functions for that class.
 
Example of Virtual Function in C++:
##include <iostream>
using namespace std;
// Base class with a virtual function
class Base {
public:
    virtual void display() {  // Virtual function
        cout << "Base class display function." << endl;
    }
};
// Derived class that overrides the virtual function
class Derived : public Base {
public:
    void display() override {  // Override the virtual function
        cout << "Derived class display function." << endl;
    }
};
int main() {
    Base* basePtr;  // Pointer to the base class
    Base baseObj;
    Derived derivedObj;
    basePtr = &baseObj;
    basePtr->display();  // Calls Base class function (due to static type Base)
    basePtr = &derivedObj;
    basePtr->display();  // Calls Derived class function (due to dynamic type Derived)
    return 0;
}
Output:
Base class display function.
Derived class display function.
Explanation:
- Base Class Pointer: In the example, 
basePtris a pointer to theBaseclass. - Base Class Object: When 
basePtrpoints to an object of theBaseclass (baseObj), thedisplayfunction of theBaseclass is called. - Derived Class Object: When 
basePtrpoints to an object of theDerivedclass (derivedObj), the overriddendisplayfunction in theDerivedclass is called, even thoughbasePtris of typeBase*. This is due to dynamic dispatch (virtual function call). - Polymorphism: This example demonstrates polymorphism, where the same function call (
display()) results in different behavior depending on the type of object (BaseorDerived), even though the pointer is of typeBase*. 
Summary:
- A virtual function in C++ is a member function in a base class that can be overridden by derived classes.
 - Virtual functions support polymorphism, allowing the appropriate function to be called based on the actual object type, not the pointer type.
 - This is implemented using dynamic dispatch or late binding, ensuring that the correct function is invoked at runtime.
 - Virtual destructors are essential to ensure that the derived class destructor is called when deleting a derived object through a base class pointer.
 
Read More
If you can’t get enough from this article, Aihirely has plenty more related information, such as C++ interview questions, C++ interview experiences, and details about various C++ job positions. Click here to check it out.
