Форум программистов, компьютерный форум, киберфорум
Наши страницы
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
Saboteuur
0 / 0 / 2
Регистрация: 27.09.2014
Сообщений: 14
#1

Деструкторы при наследовании от абстрактного класса - C++

22.10.2014, 13:44. Просмотров 410. Ответов 4
Метки нет (Все метки)

Нужно ли что то писать в деструкторах ~StringObject(){}; ~DoubleObject(){} и нужно ли создавать виртуальный деструктор класса IObject
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
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
#ifndef LIST_H
#define LIST_H
#include <iostream>
#include <stdlib.h>
 
using namespace std;
 
class IObject {
  public:
  virtual void printt()=0;
  virtual bool equal(IObject*)=0;
  virtual IObject* clone()=0;
 
};
 
class DoubleObject:public IObject{
      double data;
public:
   DoubleObject(double x=0){
       data=x;
   }
   bool equal(IObject* x){
       DoubleObject* buf;
      if(buf=dynamic_cast<DoubleObject*>(x)) return true;
      else return false;
 
   }
 
   IObject* clone(){
       DoubleObject *buf =new DoubleObject;
          buf->data=data;
         return buf;
   }
   void printt(){
       cout<<data;
   }
 ~DoubleObject(){}
};
 
class StringObject:public IObject{
   private:
    string data;
   public:
      StringObject(string x=""){
       data=x;
   }
   bool equal(IObject* x){
       StringObject* buf;
      if(buf=dynamic_cast<StringObject*>(x)) return true;
      else return false;
 
   }
   void printt(){
       cout<<data;
   }
 IObject* clone(){
     StringObject *buf =new StringObject;
        buf->data=data;
       return buf;
   }
    ~StringObject(){};
};
 
class List
{ private:
    struct Node{
           IObject* data;
           Node*next;
        };
    typedef Node* PNode;
    PNode head;
    PNode tail;
    int number_of_elements;
 
    public:
  List();
  List( List&);
  int search(IObject *x);
  void deleteList(int index);
  void addList(IObject *ptr);
  void print();
  IObject* operator[](int index);
  int Print_number_of_elements();
  ~List();
    };
 
 
#endif // LIST_H
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
22.10.2014, 13:44
Я подобрал для вас темы с готовыми решениями и ответами на вопрос Деструкторы при наследовании от абстрактного класса (C++):

Конструкторы и деструкторы при наследовании. Пара вопросов
1. Можно ли создавать виртуальный конструктор/деструктор и переопределять его...

Ошибка при наследовании класса
Всем доброго времени суток, пытаюсь отнаследовать класс, вот такой код я...

Ошибки при наследовании класса
Доброго времени суток!Возникли ошибки при компиляции кода Задание было...

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

Segmentation fault при наследовании класса
Доброго времени суток! Имею класс Initialise и класс Environment. В первом...

Ошибки при наследовании класса от вектора
Пишу программу по СМО, столкнулся с трудностью при попытке сделать наследование...

4
0x10
2554 / 1734 / 285
Регистрация: 24.11.2012
Сообщений: 4,361
22.10.2014, 13:48 #2
Цитата Сообщение от Saboteuur Посмотреть сообщение
нужно ли создавать виртуальный деструктор класса IObject
Да.

Добавлено через 1 минуту
Цитата Сообщение от Saboteuur Посмотреть сообщение
Нужно ли что то писать в деструкторах ~StringObject(){}; ~DoubleObject(){}
Ручного управления памятью в них нет, поэтому без надобности.
1
Tulosba
:)
Эксперт С++
4746 / 3240 / 496
Регистрация: 19.02.2013
Сообщений: 9,046
22.10.2014, 14:27 #3
Цитата Сообщение от 0x10 Посмотреть сообщение
Ручного управления памятью в них нет, поэтому без надобности.
Сразу вспоминается вариант с полем типа std::unique_ptr в классе. В таком случае может понадобиться не inline версия деструктора.
1
0x10
2554 / 1734 / 285
Регистрация: 24.11.2012
Сообщений: 4,361
22.10.2014, 14:32 #4
Цитата Сообщение от Tulosba Посмотреть сообщение
Сразу вспоминается вариант с полем типа std::unique_ptr в классе. В таком случае может понадобиться не inline версия деструктора.
Есть такое дело. В первый раз по незнанию может удивить.
0
Tulosba
22.10.2014, 14:39     Деструкторы при наследовании от абстрактного класса
  #5

Не по теме:

0x10, я вот всё не соберусь подсветку QtCreator'а похаять за ругань на запись вида:

C++
1
Class::~Class() = default;
в .cpp файле.

0
22.10.2014, 14:39
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
22.10.2014, 14:39
Привет! Вот еще темы с ответами:

Доступ к переменным базового класса при наследовании
Есть следующий код class Base { protected: int x; Base* enemy; ...

Ошибка: undefined reference to при наследовании класса
Здравствуйте форумчане. Пытаюсь наследовать класс MyService от OAuthService и...

Доступ к объекту базового класса при закрытом наследовании
Есть класс Pair из стандартной библиотеки. Он у меня содержит 2 массива...

Выполнение арифмитических операций с переменными private класса при наследовании
Каким образом выполнить арифметические операции с переменными private класса,...


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

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

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru