Data Structure
Networking
RDBMS
Operating System
Java
MS Excel
iOS
HTML
CSS
Android
Python
C Programming
C++
C#
MongoDB
MySQL
Javascript
PHP
- Selected Reading
- UPSC IAS Exams Notes
- Developer's Best Practices
- Questions and Answers
- Effective Resume Writing
- HR Interview Questions
- Computer Glossary
- Who is Who
Difference between a virtual function and a pure virtual function in C++
In C++, virtual and pure virtual functions are key features supporting polymorphism both allow different classes to respond uniquely to the same function call.
What is Virtual Function
A virtual function in C++ is a member function in a base class, which allows a function to be overridden in the derived class. This process helps in enabling runtime polymorphism. A virtual function is declared in the base class using the virtual keyword.
Syntax
Following is the syntax of the virtual function:
class BaseClassName {
public:
virtual void func_name() {
// implementation
}
};
Implementation of Virtual Function
In the following example, we demonstrate the working of the virtual function:
#include <iostream>
using namespace std;
class B {
public:
virtual void s() {
cout<<" In Base \n";
}
};
class D: public B {
public:
void s() {
cout<<"In Derived \n";
}
};
int main(void) {
D d; // An object of class D
B *b= &d;// A pointer of type B* pointing to d
b->s();// prints"D::s() called"
return 0;
}
Following is the output of the above code:
In Derived
What is Pure Virtual Function?
A pure virtual function is a virtual function, it has no definition in a base class, serving as a placeholder that must be overridden in derived classes. It is declared by assigning = 0 in its declaration.
Syntax
Following is the syntax of the pure virtual function:
class baseClass {
public:
virtual returnType name_of_function() = 0;
};
Implementation of Pure Virtual Function
In the following example, we demonstrate the working of the pure virtual function:
#include<iostream>
using namespace std;
class B {
public:
virtual void s() = 0; // Pure Virtual Function
};
class D:public B {
public:
void s() {
cout << " Virtual Function in Derived class\n";
}
};
int main() {
B *b;
D dobj; // An object of class D
b = &dobj;// A pointer of type B* pointing to dobj
b->s();// prints"D::s() called"
}
Following is the output of the above code:
Virtual Function in Derived class
Difference between a Virtual Function and a Pure Virtual Function
The table below shows the difference between Virtual and Pure Virtual Function:
| Sr.No | Virtual Function |
Pure Virtual Function |
|---|---|---|
| 1 | Virtual function has their definition in the class. |
Pure virtual function has no definition. |
| 2 | Declaration: virtual funct_name(parameter_list) {. . . . .}; |
Declaration: virtual funct_name(parameter_list)=0; |
| 3 | It has no concept of derived class. |
If a class contains at least one pure virtual function, then it is declared abstract. |
| 4 | If required, the base class can override a virtual function. |
In case of pure virtual function derived class has to definitely override the pure virtual function. |