277 / 154 / 52
Регистрация: 30.06.2011
Сообщений: 1,712
1

Абстрактный класс и его деструктор

13.06.2018, 21:04. Показов 587. Ответов 4
Метки нет (Все метки)

Приветствую всех. Объясните, как правильно написать деструктор абстрактного класса. Знаю, что он должен быть виртуальным и у него должно быть тело. Но в этом абстрактном классе нет работы для его деструктора, поэтому непонятно как написать.
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
13.06.2018, 21:04
Ответы с готовыми решениями:

Абстрактный класс и его наследники
Добрый день. Столкнулся с проблемой, решение которой не приходит в голову. Есть следующая...

Абстрактный класс и его наследники
Знаю, что если есть абстрактный клас(например: Account) и наследники абстрактного...

Абстрактный класс и его производные
Здравствуйте. Мне необходимо построить иерархию классов - базовый абстрактный и два производных....

Создать абстрактный класс Vehicle. На его основе реализовать классы:
Создать абстрактный класс Vehicle. На его основе реализовать классы Car (автомобиль), Bicycle...

4
1642 / 1091 / 487
Регистрация: 17.07.2012
Сообщений: 5,345
13.06.2018, 21:07 2
Так и написать.
C++
1
2
3
4
class Base {
public:
   virtual ~Base() = 0;
};
0
277 / 154 / 52
Регистрация: 30.06.2011
Сообщений: 1,712
13.06.2018, 21:21  [ТС] 3
Новичок, а как же то, что у деструктора здесь должно быть тело? При наследовании от такого класса компилятор ругается.
0
Комп_Оратор)
Эксперт по математике/физике
8725 / 4472 / 600
Регистрация: 04.12.2011
Сообщений: 13,358
Записей в блоге: 16
13.06.2018, 21:42 4
d7d1cd, тело есть, но его нет. Улыбка чеширскго кота.
C++
1
virtual ~Base(){}
хотя между скобок можно пробел поставить. Или даже ;. Вообще виртуальный деструктор нужен для правильного выбора деструкторов наследников. Хотя в общем случае, абстрактный класс это тот у которого хотя бы один виртуальный метод. То есть, нет ограничений на выделяемые ресурсы и можно такой класс написать, для которого деструктор не будет пустым. Как и конструктор, впрочем.
1
1642 / 1091 / 487
Регистрация: 17.07.2012
Сообщений: 5,345
13.06.2018, 22:23 5
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
//g++  5.4.0
 
#include <iostream>
 
class A {
public:
    virtual ~A() = 0; 
};
 
A::~A() {
    std::cout << "~A()\n";
}
 
class B: public A {
public:
    ~B() override {
        std::cout << "~B()\n";
    }
};
 
int main() {
    //A a; // такое не компилит
    B b;   // а тут все нормально
}
http://rextester.com/ILVEBZ31086
1
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
13.06.2018, 22:23
Помогаю со студенческими работами здесь

Создать абстрактный класс Pair, на его основе реализовать классы Money и Complex-С++
Создать абстрактный класс Pair (пара значений) с виртуальными методами, реализующими арифметические...

Абстрактный класс CGraphicsObject, его наследник - базовый класс CPoint, и класс - наследник от CPoint
Всем доброй ночи! Очень нужна помощь и по мере возможности разъяснения на темы: абстрактный класс в...

Класс: Разработать абстрактный класс класс Point для задания координаты...
Всем привет, помогите пожалуйста решить задачу, я уже всю голову сломал, не знаю как решить... ...

Абстрактный класс и его потомок
Есть задание в котором надо реализовать базовый абстрактный класс и два класса которые будет его...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
5
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2022, CyberForum.ru