Advertisement
Ejejejejejjr

Чисто виртуальный деструктор

Dec 27th, 2020
274
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.63 KB | None | 0 0
  1. #include <iostream>
  2. #include <string>
  3.  
  4.  
  5. class A
  6. {
  7. public:
  8.     A()
  9.     {
  10.         std::cout << "Вызван конструктор объекта класса A" << std:: endl;
  11.     }
  12.     //базовое определение чисто виртуального деструктора для класса A
  13.     virtual ~A() = 0;
  14. };
  15. //определение чисто виртуального деструктора класса A для его корректной работы
  16. A::~A(){};
  17.  
  18.  
  19. class B : public A
  20. {
  21. public:
  22.     B()
  23.     {
  24.         std::cout << "Вызван конструктор объекта класса B" << std::endl;
  25.     }
  26.     //перегрузка виртуального деструктора класса B , который унаследовал деструктор у  класса A
  27.     ~B() override  //ключевое слово для корректоной обработки ошибок, связанных с полиморфизмом
  28.     {
  29.         std::cout << "Вызван деструктор объекта класса B" << std::endl;
  30.     }
  31. };
  32.  
  33.  
  34. int main(int argc, char *argv[])
  35. {
  36.     setlocale(LC_ALL, "Rus");
  37.     srand(time(NULL));
  38.    
  39.     //теперь ,если поменять это на A *b = new B, ничего не изменится, так как эти деструкторы виртуальны
  40.     B *b = new B;
  41.    
  42.     //этот код(создание объекта класса A) выведет ошибку, так как класс A является абстрактным, потому что в нем содержится чисто виртуальный деструктор
  43.     A a;
  44.    
  45.     //очистка динамической памяти
  46.     delete b;
  47.  
  48.     return 0;
  49. }
  50.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement