Рубрики

C ++ | Виртуальные функции | Вопрос 9

Может ли деструктор быть виртуальным?

Будет ли компилироваться следующая программа?

#include <iostream>

using namespace std;

class Base {

public:

  virtual ~Base() {}   

};

int main() {

   return 0;

}

(А) да
(Б) Нет

Ответ: (А)
Объяснение: Деструктор может быть виртуальным. Мы можем захотеть вызвать соответствующий деструктор, когда указатель базового класса указывает на объект производного класса, и мы удаляем объект. Если деструктор не является виртуальным, то может быть вызван только деструктор базового класса. Например, рассмотрим следующую программу.

// 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

Тест на этот вопрос

Рекомендуемые посты:

C ++ | Виртуальные функции | Вопрос 9

0.00 (0%) 0 votes