C++ | Funciones virtuales | Pregunta 9

¿Puede un destructor ser virtual?

¿Compilará el siguiente programa?

#include <iostream>
using namespace std;
class Base {
public:
  virtual ~Base() {}   
};
int main() {
   return 0;
}

(A)
(B) No

Respuesta: (A)
Explicación: Un destructor puede ser virtual. Es posible que deseemos llamar al destructor apropiado cuando un puntero de clase base apunte a un objeto de clase derivado y eliminemos el objeto. Si el destructor no es virtual, solo se puede llamar al destructor de la clase base. Por ejemplo, considere el siguiente programa.

// Not good code as destructor is not virtual
#include<iostream>
using namespace std;

class Base  {
public:
    Base()    { cout << "Constructor: Base" << endl; }
    ~Base()   { cout << "Destructor : Base" << endl; }
};

class Derived: public Base {
public:
    Derived()   { cout << "Constructor: Derived" << endl; }
    ~Derived()   { cout << "Destructor : Derived" << endl; }
};

int main()  {
    Base *Var = new Derived();
    delete Var;
    return 0;
}

Output on GCC:
Constructor: Base
Constructor: Derived
Destructor : Base

Cuestionario de esta pregunta

Publicación traducida automáticamente

Artículo escrito por GeeksforGeeks-1 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 *