Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 07.12.2018, 09:35   #1
Wurgengel
Новичок
Джуниор
 
Регистрация: 07.12.2018
Сообщений: 6
По умолчанию Множественное наследование

Всем привет.
Не могу понять следующий подход.
Объясните немного, дальше я сам разберусь.

Есть класс данных Data.
Есть абстрактный класс Node со свойствами next, prev.
На их основе создан класс DataNode. То есть class DataNode : public Node, public Data
Создаю класс List. Но есть условие, в классе List входные, выходные типы могут
быть только Node. И работать внутри функций я могу только с Node.
Но передавать в функции класса List должен тип DataNode.

А теперь вопрос: Как я из класса List, могу работать с данными класса DataNode,
если получаемый тип сделан Node.
При создании кода компилятор не увидит же ничего, что не определено в классе Node.
Значить нужно создать виртуальные функции работы с данными. Но ведь класс Node
не знает о классе Data. Как это реализуется?

Последний раз редактировалось Wurgengel; 07.12.2018 в 09:54.
Wurgengel вне форума Ответить с цитированием
Старый 07.12.2018, 09:47   #2
Alex11223
Старожил
 
Аватар для Alex11223
 
Регистрация: 12.01.2011
Сообщений: 19,500
По умолчанию

А множественное наследование причем?

Вообще DataNode не нужен, не надо смешивать так.
Списку должно быть пофиг что хранить, Data нужен только клиенту снаружи.
Для этого template используют, смотрите на std::list<int>, std::list<Data>
https://en.cppreference.com/w/cpp/container/list
Ушел с форума, https://www.programmersforum.rocks, alex.pantec@gmail.com, https://github.com/AlexP11223
ЛС отключены Аларом.
Alex11223 вне форума Ответить с цитированием
Старый 07.12.2018, 09:55   #3
Wurgengel
Новичок
Джуниор
 
Регистрация: 07.12.2018
Сообщений: 6
По умолчанию

Цитата:
Сообщение от Alex11223 Посмотреть сообщение
А множественное наследование причем?

Вообще DataNode не нужен, не надо смешивать так.
Списку должно быть пофиг что хранить, Data нужен только клиенту снаружи.
Для этого template используют, смотрите на std::list<int>, std::list<Data>
https://en.cppreference.com/w/cpp/container/list
Да это понятно.
Но это задание от препода. Он хочет вот так и все тут.

з.ы. Подправил, при чем множественное. На их основе создан класс DataNode. То есть class DataNode : public Node, public Data
Wurgengel вне форума Ответить с цитированием
Старый 07.12.2018, 10:51   #4
p51x
Старожил
 
Регистрация: 15.02.2010
Сообщений: 15,695
По умолчанию

А зачем в вашем контейнере работа с Data?
p51x вне форума Ответить с цитированием
Старый 07.12.2018, 11:03   #5
Wurgengel
Новичок
Джуниор
 
Регистрация: 07.12.2018
Сообщений: 6
По умолчанию

Цитата:
Сообщение от p51x Посмотреть сообщение
А зачем в вашем контейнере работа с Data?
Например, хочу сохранить List в файл.
Или при таком наследовании нельзя работать с данными,
только хранение в памяти?
Wurgengel вне форума Ответить с цитированием
Старый 07.12.2018, 11:06   #6
p51x
Старожил
 
Регистрация: 15.02.2010
Сообщений: 15,695
По умолчанию

Так это не задача контейнера, а сторонняя функция, зная о DataNode, может и кастануть.
p51x вне форума Ответить с цитированием
Старый 07.12.2018, 11:30   #7
_Bers
Старожил
 
Регистрация: 16.12.2011
Сообщений: 2,329
По умолчанию

не нужно тут никакого множественного наследования.
это - бред.

Цитата:
Сообщение от Wurgengel Посмотреть сообщение
Но это задание от препода. Он хочет вот так и все тут.
скорее всего ты что-то не так понял, Бро.
вряд ли преподаватель настолько сказочный эльф.
_Bers вне форума Ответить с цитированием
Старый 07.12.2018, 11:45   #8
waleri
Старожил
 
Регистрация: 13.07.2012
Сообщений: 6,493
По умолчанию

Цитата:
Сообщение от Wurgengel Посмотреть сообщение
Значить нужно создать виртуальные функции работы с данными. Но ведь класс Node
не знает о классе Data. Как это реализуется?
Функция переопределяется в классе DataNode. В результате, вызвав функцию из класса Node вы реально попадете в DataNode.

Читайте про полиморфизм.
waleri вне форума Ответить с цитированием
Старый 07.12.2018, 13:07   #9
Wurgengel
Новичок
Джуниор
 
Регистрация: 07.12.2018
Сообщений: 6
По умолчанию

Цитата:
Сообщение от _Bers Посмотреть сообщение
не нужно тут никакого множественного наследования.
это - бред.



скорее всего ты что-то не так понял, Бро.
вряд ли преподаватель настолько сказочный эльф.
Шаблоны - это след лаба. А вот в этой ему надо иммено множественное наследование.
Wurgengel вне форума Ответить с цитированием
Старый 07.12.2018, 13:09   #10
Wurgengel
Новичок
Джуниор
 
Регистрация: 07.12.2018
Сообщений: 6
По умолчанию

Цитата:
Сообщение от waleri Посмотреть сообщение
Функция переопределяется в классе DataNode. В результате, вызвав функцию из класса Node вы реально попадете в DataNode.

Читайте про полиморфизм.
Вы не поняли. Мне нужно вызвать в классе List.
В классе Node я могу прописать только виртуальные функции.
Wurgengel вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Множественное наследование RAFA91 Общие вопросы .NET 18 05.10.2015 13:53
Множественное наследование Алексей201 Visual C++ 4 16.12.2013 04:35
Множественное наследование midiss Visual C++ 2 31.05.2013 12:52
Множественное наследование coNsept Общие вопросы C/C++ 5 12.06.2012 17:18
[с++] Множественное наследование huichos Общие вопросы C/C++ 3 16.12.2011 18:25