C++ interview questions on virtual function and abstract class
Last Updated :
01 Sep, 2018
1. What is a pure virtual function?
Ans. 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.
class Test {
public :
virtual void show() = 0;
};
|
2. What is abstract class?
Ans. A class which contains atleast one pure virtual function, is known as abstract class. see the following example
class Test {
public :
virtual void show() = 0;
};
|
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.
#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.We can have pointers and references of abstract class type.
For example the following program works fine.
#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.
#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?
#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 = ▭
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?
#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?
#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.
Share your thoughts in the comments
Please Login to comment...