Comportamiento de la función virtual en la clase derivada de la clase base y la clase abstracta

En este artículo, discutiremos el comportamiento de la función virtual en la clase derivada y la clase derivada de la clase base abstracta en C++ .

Considere el siguiente programa:

C++

// C++ program to illustrate the concept
// of Virtual Function
  
#include <bits/stdc++.h>
using namespace std;
  
// Base Class
class Base {
public:
    // Virtual Function
    virtual void print()
    {
        cout << "Inside Base" << endl;
    }
};
  
// Derived Class
class Derived : public Base {
};
  
// Driver Code
int main()
{
  
    // Object of the derived class
    Base* b2 = new Derived();
  
    // Function Call to Base Class
    b2->print();
  
    return 0;
}
Producción:

Inside Base

Explicación: cuando un puntero de la clase base se declara apuntando a un objeto de la clase derivada , solo declare la función como virtual en la base cuando sea necesario anularla en la clase derivada. Si la función se declara como virtual en la clase base, no se recomienda anularla en la clase derivada, aún llamará a la función virtual y la ejecutará.

La palabra clave virtual solo funciona cuando se busca polimorfismo en tiempo de ejecución y se anula la función de la clase base en la clase derivada. Si se usa una palabra clave virtual y no se recomienda anular esa función en la clase derivada, entonces la palabra clave virtual no sirve. Esta propiedad no es válida para la clase Abstract Base porque tampoco hay un cuerpo de función en la clase Base. A continuación se muestra el programa para ilustrar lo mismo:

Programa 1:

C++

// C++ program to illustrate the concept
// of virtual function
  
#include <bits/stdc++.h>
using namespace std;
  
// Base Class
class Base {
public:
    // Virtual Function
    virtual void print() = 0;
};
  
// Derived Class
class Derived : public Base {
  
    // Overriding of virtual function
    void print()
    {
        cout << "Inside Derived"
 << endl;
    }
};
  
// Driver Code
int main()
{
    // Object of the derived class
    Base* b2 = new Derived();
  
    // Function Call to Base Class
    b2->print();
  
    return 0;
}
Producción:

Inside Derived

Programa 2:

C++

// C++ program to illustrate the concept
// of virtual function
  
#include <bits/stdc++.h>
using namespace std;
  
// Base Class
class Base {
public:
    // Virtual Function
    virtual void print() = 0;
};
  
// Derived Class
class Derived : public Base {
};
  
// Driver Code
int main()
{
  
    // Object of the derived class
    Base* b2 = new Derived();
  
    // Function Call to Base Class
    b2->print();
  
    return 0;
}

Producción:

Explicación: si se comparan los dos programas anteriores, cuando la función se anula de la clase abstracta, entonces la palabra clave virtual funciona de la forma en que se pretendía que funcionara. Pero en el programa anterior, la función no se anuló dentro de la Clase base, y tampoco se definió la función en la Clase base, lo que resultó en el Error de compilación .

Publicación traducida automáticamente

Artículo escrito por mechanizer y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *