0 / 0 / 1
Регистрация: 10.12.2015
Сообщений: 69
1

Проблема наследования

17.10.2019, 18:03. Показов 1277. Ответов 1
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Подскажите как лучше всего решить проблему?
Имеется два набора классов: классы, описывающие смеси неких веществ, и классы, описывающие базу характеристик определённых веществ. Данные наборы классов ничего не должны знать друг о друге, поэтому для обработки появляется ещё один класс, собственно обработчик, который наследует класс набора смесей веществ и класс базы характеристик. Далее приведён пример псевдокода:

смеси.h:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
class вещество
{
public:
    тип_данных_вещества данные_вещества;
};
 
class смесь_веществ
{
public:
    тип_данных_смеси данные_смеси;
    int количество_веществ;
    вещество **вещества;
};
 
class набор_смесей
{
public:
    тип_данных_набора данные_набора;
    int количество_смесей;
    смесь_веществ **смеси;
};
база_данных.h:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
class характеристика_вещества
{
public:
     тип_данных_характеристики данные_характеристики;
};
 
class база_данных
{
public:
    тип_данных_базы данные_базы;
    int количество_характеристик;
    характеристика_вещества **характеристики;
};
обработчик.h:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
class некий_обработчик: public база_данных, public набор_смесей
{
public:
     class вещество2: public вещество
     {
     public:
          тип_дополнительных_данных_вещества дополнительные_данные_вещества;
     }
     void обработка()
     {
          // некоторая обработка имеющихся смесей, с учётом их характеристик из базы данных
     }
};
Проблема состоит в том, что при объединении веществ в смеси у них появляются дополнительные данные, характеризующие как именно данное вещество взаимодействует с остальной смесью, поэтому один из классов обработчика наследует класс вещества и дополняет его новыми данными. При создании экземпляра класса обработчика выполняется следующая операция:

C++
1
смеси[i]->вещества[j] = new вещество2();
И далее для расчётов используется приведение типов:

C++
1
((вещество2*)смеси[i]->вещества[j])->дополнительные_данные_вещества
Но теперь возникает проблема как записывать, читать, а главное удалять базовый класс набор_смесей при записи, чтении и удалении класса обработчик, ведь в нём будут вызываться функции класса вещество, а не вещество2.
Как грамотнее всего поступать в данной ситуации?
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
17.10.2019, 18:03
Ответы с готовыми решениями:

Проблема наследования от шаблонного класса.
Привет всем! У меня есть шаблонный класс, и наследуемый от него шаблонный класс. Базовый: ...

Чем отличаются структуры для наследования интерфейса от структур для наследования реализаций?
Дорогие программисты, во первых, хочу поздравить вас с Наступающим новым Годом! Я к вам обращаюсь с...

Наследования
#include <iostream> #include <string> using namespace std; class student { protected: int...

наследования
Приведите пожалуйста пару примеров наследования.

1
фрилансер
5497 / 5093 / 1047
Регистрация: 11.10.2019
Сообщений: 13,321
17.10.2019, 18:24 2
Лучший ответ Сообщение было отмечено KimiRaikonnen как решение

Решение

KimiRaikonnen, виртуальные функции должны помочь.

Заодно не надо будет вот такое нехорошее приведение делать (вещество2*)
1
17.10.2019, 18:24
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
17.10.2019, 18:24
Помогаю со студенческими работами здесь

Наследования
Что именно наследует класс-потомок при наследовании? А что не наследует? Чем отличаются private,...

Свойства наследования
1) Объект класса-потомка может вызывать некоторые методы класса-предка. 2) Наследование - это...

Спецификаторы наследования
Всем здрасьте, у меня возник такой вопросик. Есть базовый класс - Main. Есть класс, который...

Наследования, стек
Задача:В различных ситуациях иногда требуется работать с двумя числами, объединенными в блок....


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

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

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