×

Virtual Function Vs Pure Virtual Function

Virtual activity is a member function defined in the foundation phase that can be redefined by acquired classes.

Let's have a look at an example:

#include <iostream>  
#include <bits/stdc++.h>
#include <stdlib>
using namespace std;  
class Base  
{  
    public:  
    void show()  
    {  
        std::cout << "Base class" << std::endl;  
    }  
};  
class derived_1 : public Base  
{  
    public:  
    void show()  
    {  
        std::cout << "Derived class 1" << std::endl;  
    }  
};  
class derived_2 : public Base  
{  
    public:  
    void show()  
    {  
        std::cout << "Derived class 2" << std::endl;  
    }  
};  
int main()  
{  
    Base *be;  
    derived_1 de1;  
    derived_2 de2;  
    be=&de1;  
    be->show();  
    be=&de2;  
    be->show();  
    return 0;  
}

OUTPUT:

Derived Class 1
Derived Class 2

Explanation:

We haven't utilized the virtual method in the code above. The display () function is contained in a basic class that we developed. The two classes 'derived_1' and 'derived_2' are also formed and inherit the attributes of the base class. The display () function has been redefined in both the derived_1 and derived_2 classes. The pointer variable 'be' of class base is defined inside the main () function. de1 and de2 are the objects of the derived_1 and derived_2 classes, respectively. Although the 'be' contains the addresses of de1 and de2, when invoking the display () method, it always uses the base class's show () method rather than the derived_1 and derived_2 class's methods.

To solve the past problem, we have to make the path a reality in the Foundation class. The word "virtual" refers to a path that seems to exist but is not real. By simply preceding the function with the virtual keyword, we may make the method virtual. In the above application, we must add the virtual keyword before the display () function in the base class, as seen below:

virtual void show ()  
{  
    std::cout << "Base_Class" << std::endl;  //Base class
}   

Note:

  • If the function is made virtual, the compiler will choose which function to execute at run time based on the location supplied to the base class's reference.
  • It is a polymorphism that occurs during operation.
  • If the foundation phase and the found phase both have the same function name and the foundation phase is given the address of the class acquired object, the base phase function will be used.

What is the definition of pure virtual function?

A pure virtual function is one that does not have a definition in the class. Let’s look at an example to better grasp the concept of pure visual performance. Shape is the basic class in the diagram above, whereas rectangle, square, and circle are the derived classes. Because we haven't given the virtual function any definition, it will be automatically changed to a pure virtual function.

Pure virtual function characteristics:

  • Pure virtual function is an idle activity. "Do nothing" here refers to the fact that it just offers the template, while the derived class implements the function.
  • It is possible to think of it as an empty function because the pure virtual function has no definition in relation to the base class.
  • Because pure virtual activity has no definition in the foundation phase, programmers have to redefine it in the acquired category.
  • A class with only virtual functions cannot be utilized to produce its own direct objects. It indicates that if the class has any pure virtual functions, we won't be able to build an object from it. An abstract class is the name for this sort of class.

A virtual function can be created in two ways:

Virtual void display () = NULL;//syntax1
Virtual void display () { }  //syntax2

Let's have a look at an example of pure virtual function:

#include <iostream>  
#include <bits/stdc++.h>
#include <stdlib>
using namespace std;  
// Creating Abstract class  
class Create_Shape  
{  
    public:  
    virtual float calculate_Area() = 0; // pure virtual function.  
};  
class Create_Square : public Create_Shape  
{  
    float i;  
    public:  
    Create_Square(float length)  
    {  
        i = length;  
    }  
    float calculate_Area()  
    {  
        return i*i;  
    }  
};  
class Create_Circle : public Create_Shape  
{  
    float radius;  
    public:  
      
    Circle(float x)  
    {  
        radius = x;  
    }  
    float calculate_Area()  
    {  
        return 3.14*radius*radius ;  
    }  
};  
class Create_Rectangle : public Create_Shape  
{  
    float length;  
    float breadth;  
    public:  
    Rectangle(float x, float y)  
    {  
       length=x;  
       breadth=y;  
    }  
    float calculate_Area()  
    {  
        return length*breadth;  
    }  
};  
int main()  
{  
      
    Create_Shape *shape;  
    Create_Square s(3.4);  
    Create_Rectangle radius(5,6);  
    Create_Circle c(7.8);  
    shape =&s;  
    int i1 =shape->calculate_Area();  
    shape = &radius;  
    int i2 = shape->calculate_Area();  
    shape = &c;  
    int i3 = shape->calculate_Area();  
    std::cout << "Area of the square is " <<i1<< std::endl;  
    std::cout << "Area of the rectangle is " <<i2<< std::endl;  
    std::cout << "Area of the circle is " <<i3<< std::endl;  
    return 0;  
}

OUTPUT:

Area of the square is 11.56
Area of rectangle is 30
Area of circle is 191.03
…………………………………………
Process executed in 1329 seconds
Press any key to continue.

What is the difference between a virtual function and a pure virtual function?

Virtual FunctionPure Virtual Function
Virtual activity is the activity of a foundation phase member that can be redefined in acquired classes.Pure virtual work is the work of a basic class member whose proclamation is in the foundation phase and implementation is in the acquired phase.
Virtual function-containing classes are not abstract classes.The abstract classes are those that include only pure virtual functions.
In the case of a virtual function, the base class provides the function definition.The definition of a function is not supplied in the base class for a pure virtual function.
It is possible to instantiate the base class that has a virtual function.When a base class has only pure virtual functions, it becomes an abstract class that cannot be instantiated.
It will not affect the merger if the acquired category does not redefine the visible function of the foundation phase.The derived class will not produce an error if it does not define the pure virtual function, but it will become an abstract class.
The virtual function may or may not be redefined by all descendant classes.The pure virtual function must be defined by all derived classes.

Virtual function and pure virtual function have certain similarities:

  • Run-time polymorphism is made up of these principles.
  • The prototype, that is, the declaration of both functions, stays the same throughout the program.
  • These functions cannot be static or global.

Related Topics

How to Handle Divide by Zero Exception in C++

If you are a programmer or interested in coding then it is obvious that you face some illogical test cases. Suppose, you have written one program that calculates the factorial...

6 minutes read.

C++ Program to Print Fibonacci Triangle

Fibonacci Triangle Program in CPP Definition: Fibonacci Triangle as the name suggests is the same as the Fibonacci number series where the next element is the sum of the previous two elements....

3 minutes read.

Queue in C++

What is Queue? As the name suggests, the queue is the type of data structure that follows the FIFO (First In - First Out) mechanism. In simple words, it is...

4 minutes read.

Learn C++ Tutorial

C++ Introduction C++ is an object-oriented programming language. It was developed by Bjarne Stroustrup at AT&T Bell Laboratories. It is superset (extension) of C programming language. Depending upon features supported by programming...

10 minutes read.

Difference between "int main( ) and int main(void)" in C/C++

int main( ) function In the C/C++ programming language, int main() indicates a function that returns an integer at the end of the program execution. In general, a value of '0' indicates...

3 minutes read.

Do-While Loop Examples in C++

Before we move on the examples of Do-While loop, let’s learn little bit about the Do-While loop in C++ language. Do While loop An iterative loop that checks the condition at the...

5 minutes read.

C++ Iterators

What are iterators ? Iterators are among the four foundations of the C++ Standard Template Library, also known as the STL. The memory address of the STL container classes is pointed...

15 minutes read.

goto statement in C and C++

goto statement in C and C++ The goto statement is a jump statement, also sometimes referred to as an unconditional jump statement. Within a function, the goto statement can be used...

3 minutes read.

C++ Virtual Function

A virtual function is such function which is declared inside the base class and redefined by the derive class. C++ uses a virtual keyword to make a function as a virtual function. The virtual...

1 minute read.

Hierarchical Inheritance

C++ Hierarchical Inheritance Hierarchical inheritance inherits the property of one base class in more than one derived class.   C++ Hierarchical Inheritance Example #include <iostream>   using namespace std;   class Person {       char gender[10];       int age;   public:       void getPerson()       {           cout << "Age: "; cin >> age;           cout << "Gender: "; cin >> gender;       }       void dispPerson()       {           cout << "Age: " << age << endl;           cout << "Gender: " << gender << endl;       }   };   class Employee : public Person {       float salary;   public:       void getEmployee()       {           Person::getPerson();           cout << "Salary: Rs."; cin >> salary;       }       void dispEmployee()       {           Person::dispPerson();           cout << "Salary: Rs." << salary << endl;       }   };   class Student : public Person {       char level[20];   public:       void getStudent()       {           Person::getPerson();           cout << "Class: "; cin >> level;       }       void dispStudent()       {           Person::dispPerson();           cout << "Level: " << level << endl;       }   };   int main()   {       Person per;       Employee emp;       Student stu;       cout << "Student data" << endl;       cout << "Enter data" << endl;       stu.getStudent();       cout << endl << "Displaying data" << endl;       stu.dispPerson();       cout << endl << "Staff Data" << endl;       cout << "Enter data" << endl;       emp.getEmployee();       cout << endl << "Displaying data" << endl;       emp.dispPerson();   } Output: Student data Enter data Age: 10 Gender: f Class: 5 Displaying data Age: 10 Gender: f Employee data Enter data Age:...

1 minute read.

C++ Close file

C++ File Handling close() Function A file which is opened while reading or writing in file handling must be closed after performing an action on it. The close() function is used to close...

2 minutes read.

Structure Sorting (By Multiple Rules) in C++

To understand the concept of Structure Sorting (By Multiple Rules) in C++, it is recommended to know the Structures concept in the C++ programming language. Here the scenario is pretty...

3 minutes read.

ATM machine program in C++ using functions

Automated Teller Machines (ATMs) carry out daily financial transactions. They are straightforward and simple, allowing customers to complete self-service transactions quickly. ATMs can then be used to withdraw cash, deposit...

3 minutes read.

Converting string into integer in C++

When programming in C++, we'll frequently need to change one data type to another. When we use C++ to create apps, we must transform data from one type to another. When...

7 minutes read.

Bits stdc++.h in C++

<bits/stdc++.h> in C++ In essence, it is a header file that contains all the standard libraries. It makes sense to use this file in programming competitions to speed up work, especially...

2 minutes read.

C++ String Concatenation

C++ String Concatenation In this section, we will learn about C ++ String Concatenation, what it does, how it works, and will also see its programs. What is the String Concatenation? The + operator...

3 minutes read.

Hello World Program in C++

The steps for “Hello World” C++ program are as follows: Write a C++ code given below in an editor. Save the file with .cpp Compile the code using C++ compiler or using online...

3 minutes read.

Pointers in C++

Pointers are a powerful feature in the C++ programming language, allowing developers to directly manipulate memory addresses and create more efficient and dynamic programs. However, pointers can also source various...

3 minutes read.

Initialize Vector in C++

Initialize Vector in C++  The following comparison operators are defined for vector and those are given below. ==, <, <=, !=, >,>=  This allows you to access the element of a vector using...

3 minutes read.

fread() Function in C++ Programming

C++ language is used to make high-performance applications that can work efficiently, and it is one of the world's most popular languages. It is an object-oriented and high-level programming language;...

3 minutes read.