×

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 call a void function in C++

Generally, any function has two types: 1. Void function: It doesn't return any value. 2. Non-void function: It returns some value. Program to call a void function in C++ #include <iostream> using namespace std;  void check() {  ...

2 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.

Sliding Window Technique in C++

Sliding Window Technique or Window Sliding Technique is a computational technique that is mainly used to reduce the use of nested loop and replace it with a single loop. It...

4 minutes read.

C++ if-else

C++ if else Control Statement if else control statement in C++ is used to control the program flow in a two-way direction. When condition returns a true value, then the program executes if condition block otherwise...

1 minute read.

C++ Range-based For Loop

In C++ language, the range-based for loop was added, which is far superior than the ordinary For loop. The implementation of a range-based for loop doesn't really need much code. It's a...

4 minutes read.

How to calculate size of string in C++

What is string in C++? In C++, a string is a sequence of characters. The string data type is part of the Standard Template Library (STL) and is defined in the...

4 minutes read.

C++ Void Pointer

A void pointer is a general purpose pointer that can have an address of any data type but is not related to any data type. Void Pointer Syntax: void *ptr;  We can't...

2 minutes read.

C++ Functions

In other programming languages, a function is referred to as a process or a subroutine. We can design functions to execute any task. A function can be used repeatedly. It...

5 minutes read.

C++ Call by Value

In this article, we will discuss C++ Call by Value with their syntax, examples, use cases, advantages, and disadvantages. C++ Function A function is a set of statements that executes a task....

5 minutes read.

C++ Overloading

C++ Overloading is a condition when two or more members have the same name with different parameter type or a different number of parameter. C++ overloading is two types: Function...

1 minute read.

C++ For loop

C++ loop Statement C++ Loop statement allows us to repeat the execution of a statement or group of statements multiple times. The statement(s) repeat execution within loop until the condition of loop...

2 minutes read.

Two dimension array

C++ Two dimension (2D) Array Two dimension (2D) array is an array of arrays. It is represented in the form of row and column. The elements of 2D array are accessed through the...

2 minutes read.

C++ Expressions

C ++ equations are made up of operators, constants and variables arranged according to language rules. It may also include function calls that give results. To calculate the value, the...

4 minutes read.

Computing index using Pointers Returned by STL Functions in C++

In this tutorial we will learn how to compute index using pointers which returned by STL functions in C++. Many built-in C++ functions return pointers to memory places that provide...

2 minutes read.

Structure of C++ Program

Many people believe that C++, an object-oriented programming (OOP) language, is the finest language for developing demanding applications. A superset of the C language is C++. Java, a closely comparable...

4 minutes read.

C++ Structs

We frequently encounter scenarios in which we must store a bunch of data, whether of comparable or dissimilar data kinds. Arrays are used to hold a group of data of...

6 minutes read.

Dynamic Memory Allocation in C++

In some programming situations, the number of data items changes as the program is running, which is known as dynamic data or input. Consider a real-world situation where a program...

3 minutes read.

C++ find missing in the second array

Given two arrays A and B of sizes n and m. Find the elements from array A that are not present in array B. Example Input : a[] = {1, 2, 3, 5,...

3 minutes read.

C++ Continue in for loop

Continue statement: Inside the loop, the continue statement is used to control the loop. C++ utilizes the continue keyword to implement the continue statement, which transfers the program's flow at the start...

4 minutes read.

C++ cin and cout

In this article, we will discuss the C++ cin and cout with their library and examples. C++ Standard Input/Output: User-program communication is made possible by C++’s usage of input and output (I/O)...

5 minutes read.