C++ Tutorial Index

C++ Tutorial C++ History C++ Installation C++ First Program C++ cin and cout C++ Data type C++ Variable C++ operator C++ Keywords

C++ Control Statements

C++ If C++ Nested if C++ If-else C++ If-else-if C++ Switch C++ Break C++ Continue C++ Goto C++ For loop C++ While loop C++ Do while loop

C++ Functions

C++ Call by Value C++ Call by Reference C++ Recursion Function C++ Inline function C++ Friend function

C++ Arrays

Single dimension array Two dimension array

C++ Strings

C++ Strings

C++ Inheritance

C++ Inheritance Single level Inheritance Multilevel Inheritance Multiple Inheritance Hierarchical Inheritance Hybrid Inheritance

C++ Polymorphism

C++ Polymorphism C++ Overloading C++ Overriding C++ Virtual Function

C++ Pointers

C++ Pointers C++ this pointer

C++ Exception Handling

C++ Exception Handling

C++ Constructors

C++ Constructors Default Constructor Parameterize Constructor Copy constructor Constructor Overloading Destructor

C++ File Handling

C++ File Handling C++ Writing to file C++ Reading file C++ Close file

Miscellaneous

C Vs C++ C++ Comments C++ Data Abstraction C++ Identifier C++ Memory Management C++ Storage Classes C++ Void Pointer C++ Array To Function C++ Expressions C++ Features C++ Interfaces C++ Encapsulation std::min in C++ External merge sort in C++ Remove duplicates from sorted array in C++ Precision of floating point numbers Using these functions floor(), ceil(), trunc(), round() and setprecision() in C++ C++ References C++ Friend Functions C++ Mutable keyword Unary Operators in C++ Initialize Array of objects with parameterized constructors in C++ Differences between #define & const in C/C++ C++ Program to Implement Shell Sort C++ Program to Implement Merge Sort Storage Classes in C Vector resize() in C++ Passing by Reference Vs. Passing by the pointer in C++ Free vs delete() in C++ goto statement in C and C++ C++ program to read string using cin.getline() C++ String Concatenation Heap Sort in C++ Swap numbers in C++ Input Iterators in C++ Fibonacci Series in C++ C ++ Program: Alphabet Triangle and Number Triangle C++ Program: Matrix Multiplication C++ Program to Print Fibonacci Triangle Stack in C++ Maps in C++ Queue in C++ C++ Bitset C++ Algorithms Priority Queue in C++ C++ Multimap C++ Deque Function Pointer in C++ Sizeof() Operators in C++ C++ array of Pointers free() Vs delete in C Timsort Implementation Using C++ CPP Templates C++ Aggregation C++ Enumeration C++ Math Functions C++ Object Class C++ Queue Initialize Vector in C++ Vector in C++ C++ STL Components Function overloading in C++ C++ Maximum Index Problem C++ find missing in the second array C++ Program to find the product array puzzle C++ Program To Find Largest Subarray With 0 Sum C++ Program To Move All Zeros To The End Of The Array C++ Program to find the element that occurs once C++ Program to find the largest number formed from an array Constructor Vs Destructor C++ Namespaces C++ OOPs Concept C++ Static C++ Structs C++ Try-Catch C++ User Defined Exceptions C++ Virtual Destructor C++ vs C# Malloc() and new in C++ Palindrome Number Program in C++ Snake Code in C++ Splitting a string in C++ Structure Vs Class in C++ Virtual Function Vs Pure Virtual Function C++ Bidirectional Iterators C++ Forward Iterators C++ Iterators C++ Output Iterators C++ Range-based For Loop Converting string into integer in C++ LCM Program in C++ Type conversion in C++ Add two numbers using the function in C++ Advantage and disadvantage friend function C++ Armstrong Number Program in C++ ATM machine program in C++ using functions Binary to Decimal in C++ Bit Manipulation in C++ C++ Constructor C++ Dijkstra Algorithm Using the Priority Queue C++ int into String C++ Signal Handling Decimal to Binary in C++ Decimal to Hexadecimal in C++ Decimal to Octal in C++ Factorial Program in C++ Function in C++ Hexadecimal to Decimal in C++ Octal to Decimal in C++ Reverse a Number in C++ Structure Vs Class in C++ C++ Forward Iterators C++ Output Iterators C++ Prime number program Char Array to String in C++ Constructor Overloading in C++ Default arguments in C++ Different Ways to Compare Strings in C++ Dynamic Binding in C++ Program to convert infix to postfix expression in C++ SET Data Structure in C++ Upcasting and Downcasting in C++ Reverse an Array in C++ Fast Input and Output in C++ Delete Operator in C++ Copy elision in C++ C++ Date and Time C++ Bitwise XOR Operator Array of sets in C++ Binary Operator Overloading in C++ Binary Search in C++ Implementing the sets without C++ STL containers Scope Resolution Operator in C++ Smart pointers in C++ Types of polymorphism in C++ Exception Handling in C++ vs Java Const Keyword in C++ Type Casting in C++ Static keyword in C++ vs Java Inheritance in C++ vs Java How to concatenate two strings in C++ Programs to Print Pyramid Patterns in C++ swap() function in C++ Structure of C++ Program Stringstream in C++ and its applications rand() and srand() in C / C++ C++ Ternary Operator C++ Scope of Variables While Loop Examples in C++ Star pattern in C++ using For Loops For Loop Examples in C++ Do-While Loop Examples in C++ Top 5 IDEs for C++ That You Should Try Once Assertions in C/C++ C++ Convert Int to String Continue in C++ While loop Diamond Pattern in C++ using For Loop How to Reverse a String in C++ using Do-While Loop How to Reverse a String in C++ using For Loop How to Reverse a String in C++ using While Loop Infinite loop in C++ Loops in C++

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.



ADVERTISEMENT
ADVERTISEMENT