Open In App

C++ Interview Questions on Virtual Function and Abstract Class

Last Updated : 01 Nov, 2024
Comments
Improve
Suggest changes
Like Article
Like
Report

Diving into the depths of C++ programming requires a solid grasp of some of its most important topics, such as virtual functions and abstract classes. These concepts are not only fundamental to mastering the language but are also frequent subjects in technical interviews.

In this interview preparation guide, you will explore a comprehensive list of C++ interview questions specifically focused on virtual functions and abstract classes. These questions are designed to test and expand your knowledge of C++’s object-oriented programming capabilities, from basic definitions to complex scenario-based queries. Perfect for both beginners and experienced developers.

List of CPP Interview Questions on Virtual Function and Abstract Class

1. What is a pure virtual function?

A pure virtual function (or abstract function) in C++ is a virtual function for which we don’t have implementation, we only declare it. A pure virtual function is declared by assigning 0 in declaration. See the following example.

CPP
// An abstract class
class Test {
    // Data members of class
public:
    // Pure Virtual Function
    virtual void show() = 0;

    /* Other members */
};

2. What is abstract class?

A class which contains atleast one pure virtual function, is known as abstract class. see the following example

CPP
// An abstract class
class Test {
    // Data members of class
public:
    // Pure Virtual Function
    virtual void show() = 0;

    /* Other members */
};

In above example, Test is an abstract class because it has a pure virtual function.

Some interesting facts about abstract class

1) We can’t create an object of abstract class.

CPP
// pure virtual functions make a class abstract
#include <iostream>
using namespace std;

class Test {
    int x;

public:
    virtual void show() = 0;
    int getX() { return x; }
};

int main(void)
{
    Test t;
    return 0;
}

Output :

Compiler Error: cannot declare variable 't' to be of abstract
 type 'Test' because the following virtual functions are pure 
within 'Test': note:     virtual void Test::show() 

2)These questions are designed to test and expand your knowledge of C++’s object-oriented programming capabilities, from basic definitions to complex scenario-based queriesWe can have pointers and references of abstract class type. For example the following program works fine.

CPP
#include <iostream>
using namespace std;

class Base {
public:
    virtual void show() = 0;
};

class Derived : public Base {
public:
    void show() { cout << "In Derived \n"; }
};

int main(void)
{
    Base* bp = new Derived();
    bp->show();
    return 0;
}

Output:

 In Derived 

3) If we do not override the pure virtual function in derived class, then derived class also becomes abstract class. The following example demonstrates the same.

CPP
#include <iostream>
using namespace std;
class Base {
public:
    virtual void show() = 0;
};

class Derived : public Base {
};

int main(void)
{
    Derived d;
    return 0;
}

output:

Compiler Error: cannot declare variable 'd' to be of abstract type 
'Derived'  because the following virtual functions are pure within
'Derived': virtual void Base::show() 

3. What is the output of this program?

CPP
#include <iostream>
using namespace std;
class Test {
protected:
    int width, height;

public:
    void set_values(int a, int b)
    {
        width = a;
        height = b;
    }
    virtual int area(void) = 0;
};
class r : public Test {
public:
    int area(void)
    {
        return (width * height);
    }
};
class t : public Test {
public:
    int area(void)
    {
        return (width * height / 2);
    }
};
int main()
{
    r rect;
    t trgl;
    Test* ppoly1 = &rect;
    Test* ppoly2 = &trgl;
    ppoly1->set_values(4, 5);
    ppoly2->set_values(4, 5);
    cout << ppoly1->area();
    cout << ppoly2->area();
    return 0;
}

output:

2010

Explanation:

In this program, we are calculating the area of rectangle and triangle by using abstract class.

4. What is the output of this program?

CPP
#include <iostream>
using namespace std;
class Base {
public:
    virtual void print() const = 0;
};
class DerivedOne : virtual public Base {
public:
    void print() const
    {
        cout << "1";
    }
};
class DerivedTwo : virtual public Base {
public:
    void print() const
    {
        cout << "2";
    }
};
class Multiple : public DerivedOne, DerivedTwo {
public:
    void print() const
    {
        DerivedTwo::print();
    }
};
int main()
{
    Multiple both;
    DerivedOne one;
    DerivedTwo two;
    Base* array[3];
    array[0] = &both;
    array[1] = &one;
    array[2] = &two;
    for (int i = 0; i < 3; i++)
        array[i]->print();
    return 0;
}

output

212

Explanation:

In this program, We are executing these based on the condition given in array. So it is printing as 212.

5. What is the output of this program?

CPP
#include <iostream>
using namespace std;
class sample {
public:
    virtual void example() = 0;
};
class Ex1 : public sample {
public:
    void example()
    {
        cout << "GeeksForGeeks";
    }
};
class Ex2 : public sample {
public:
    void example()
    {
        cout << " is awesome";
    }
};
int main()
{
    sample* arra[2];
    Ex1 e1;
    Ex2 e2;
    arra[0] = &e1;
    arra[1] = &e2;
    arra[0]->example();
    arra[1]->example();
}

Output:

 GeeksForGeeks is awesome

Explanation:

In this program, We are combining the two statements from two classes and printing it by using abstract class.



Similar Reads