Форум программистов, компьютерный форум, киберфорум
Наши страницы

Наследование. Виртуальные методы/деструкторы. - C++

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ error C2143: синтаксическая ошибка: отсутствие "]" перед ";" http://www.cyberforum.ru/cpp-beginners/thread560822.html
#include <iostream> #include <conio.h> #include <cmath> using namespace std; // Программа int main () { setlocale (LC_ALL, "Russian" ); int m, p, r, tab , i, j; cout << "Введите любое...
C++ Есть ли утечка памяти? Пример добавления элемента в список. // Включение в список нового компонента void comp_in(dyn_list &l, char* n, char* v) { comp* c = new comp(); strcpy_s(c->name, 20, n);... http://www.cyberforum.ru/cpp-beginners/thread560813.html
C++ Задача на Структуры
Записная книжка состоит из страниц. В книжке сохраняются телефонные номера знакомых. На каждой странице указаны фамилии, начинающиеся с одной и той же буквы – индекса этой страницы. Данные о...
Определить, на каком расстоянии от начала автотрассы начинается и заканчивается первый самый длинный участок с непрерывным подъемом C++
Всем доброго времени суток! Помогите пожалуйста решить задачу: Известна высота над уровнем моря каждого километра 100-километровой автотрассы. Определить, на каком расстоянии от начала автотрассы...
C++ Максимальное количество одинаковых элементов массива http://www.cyberforum.ru/cpp-beginners/thread560723.html
Всем доброго времени суток! Помогите пожалуйста решить задачу: Дан целочисленные массив размера N. Определить максимальное количество его одинаковых элементов. На языке С. Спасибо!
C++ Класс complex для программной модели заданного объекта. Описание объекта и его основных свойств приводится ниже. Привести фрагмент программы (int main), использующий объекты разработанного класса: Объект... подробнее

Показать сообщение отдельно
IcyWind
8 / 8 / 2
Регистрация: 19.09.2011
Сообщений: 272

Наследование. Виртуальные методы/деструкторы. - C++

28.04.2012, 12:33. Просмотров 1708. Ответов 6
Метки (Все метки)

Есть базовый класс Cell (код можно даже не смотреть - он просто для иллюстрации -> вопрос внизу)
C++ (Qt)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
class Cell
{
    friend class Obstacle; 
    friend class Prey;
    friend class Predator;
    
    Ocean *ocean;
    int line;
    int column;
 
public:
    Cell(int, int );
 
    virtual void exec() = 0;
    void print();
 
    virtual ~Cell(); //по слову виртуал - ВОПРОС
};
P.s. Класс Ocean - в данном вопросе не важен.

в его(Cell) френдах сидят его же наследники:
C++ (Qt)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
class Obstacle : public Cell
{
    
public: 
    Obstacle(int,int);
 
    void exec();
    void print();
 
    ~Obstacle();
};
 
 
class Prey : public Cell
{
public:
    Prey(int,int);
    
    void exec();
    void print();
 
    ~Prey();
};
 
class Predator : public Prey
{
public: 
    Predator(int,int);
 
    void exec();
    void print();
 
    ~Predator();
};
Ну теперь к вопросу: в базовом классе Cell есть виртуальный метод. Правило хорошего тона советует: "если в классе есть хотя бы один виртуальный метод - сделай виртуальный деструктор". Предположим, что при вызове деструктора Cell мне нужно будет сделать
C++ (Qt)
1
delete ocean;
Тогда:
если я опишу НЕвиртуальный деструктор, то в классах Prey и Obstacle, которые напрямую наслудуются от Cell этот деструктор будет вызываться -> то есть память под ocean - будет успешно удалена. НО! я отрыл, что, если наследовать от класса с виртуальными методами, то у потомка автоматически генерируется виртуальный деструктор, то есть для класса Predator мне придётся заного писать деструктор, который удаляет память под ocean?! или я чего-то не так понял?
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru