![]() |
Модераторы: bsa |
![]() ![]() ![]() |
|
SlowCheetah |
|
|||
Новичок Профиль Группа: Участник Сообщений: 8 Регистрация: 25.10.2008 Репутация: нет Всего: нет |
подкиньте идею создания класса списка для двух других классов(базового и производного), т.е для этих классов должен быть составлен класс - список, в котором есть все данные(next, prev) и функции работы со списком, причем список можно применять как к базовому, так и к производному классам по отдельности. класс-список для одного другого я составил, а потом возникли кое-какие вопросы
пример: // два класса не списка class base { /* ... */ }; class derived { /* ... */ } и для них должен быть какой-нибудь List class List { /* ... */ }; // вопрос - как лучше сделать? // сделать производным List от base // class List : public base { /* ... */ } // а потом derived от List //class derived : public List { /* ... */ } // или же сначала derived от base // а потом list от derived ??? // или можно как-то лучше сделать ??? |
|||
|
||||
mes |
|
|||
любитель ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 7954 Регистрация: 14.1.2006 Репутация: 79 Всего: 250 |
не до конца понял вопрос.
std::list<> чем не подходит ? |
|||
|
||||
SlowCheetah |
|
|||
Новичок Профиль Группа: Участник Сообщений: 8 Регистрация: 25.10.2008 Репутация: нет Всего: нет |
если б можно было использовать std::list, я б использовал конечно же, но в данной конкретной задаче этого делать не нужно
Добавлено через 2 минуты и 58 секунд в общем нужно написать для двух классов(базового и производного) класс-список, который мог работать как с одним, так и с другим, так и с обоими сразу, вопрос в том, как лучше эту конструкцию организовать? |
|||
|
||||
Shooroop |
|
|||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 75 Регистрация: 28.4.2008 Где: Красноярск Репутация: нет Всего: 2 |
обратите внимание на полиморфизм и "указатель на void"
насколько я понял задачу то это должно помочь
|
|||
|
||||
SlowCheetah |
|
|||
Новичок Профиль Группа: Участник Сообщений: 8 Регистрация: 25.10.2008 Репутация: нет Всего: нет |
ок
|
|||
|
||||
J0ker |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 986 Регистрация: 17.9.2008 Репутация: 9 Всего: 14 |
||||
|
||||
Rickert |
|
|||
![]() Ситхи не пройдут! ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 3356 Регистрация: 11.7.2006 Где: Лакрима Репутация: нет Всего: 52 |
Shooroop, я бы сделал класс шаблон и третий класс, который бы являлся наследником первых двух. И использовал тот, который нужен.
-------------------- Ни что не внушает сна крепче, чем день приисполненный трудов! |
|||
|
||||
J0ker |
|
||||||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 986 Регистрация: 17.9.2008 Репутация: 9 Всего: 14 |
ээээ чиста академический интерес - каких "первых двух"? и при чем тут шаблон и зачем усложнять себе жизнь множественным наследованием? Добавлено через 3 минуты и 35 секунд
оппа, вот это ж*па ![]() пардон, не удержался - рифма понравилась ![]() а сразу temp->data->out() не судьба? Добавлено через 11 минут и 14 секунд а это что? да у вас тут прям Клондайк void add(base *b) !!!! Добавлено через 12 минут и 3 секунды вот научи кастать - они себе и лоб расшибут ![]() |
||||||
|
|||||||
Rickert |
|
|||
![]() Ситхи не пройдут! ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 3356 Регистрация: 11.7.2006 Где: Лакрима Репутация: нет Всего: 52 |
Два класса, которые даны человеку изначально. Шаблон при том, что на нём основывать двусвязанный список. -------------------- Ни что не внушает сна крепче, чем день приисполненный трудов! |
|||
|
||||
J0ker |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 986 Регистрация: 17.9.2008 Репутация: 9 Всего: 14 |
т.е. вы предлагаете древо наследования расположить вверх корнём? ![]() а зачем? |
|||
|
||||
Rickert |
|
|||
![]() Ситхи не пройдут! ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 3356 Регистрация: 11.7.2006 Где: Лакрима Репутация: нет Всего: 52 |
J0ker при чём тут расположение дерева корнём вверх?
-------------------- Ни что не внушает сна крепче, чем день приисполненный трудов! |
|||
|
||||
J0ker |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 986 Регистрация: 17.9.2008 Репутация: 9 Всего: 14 |
ну в данном случае предложение использовать множественное наследование мне видится исключительно в таком свете |
|||
|
||||
mes |
|
|||
любитель ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 7954 Регистрация: 14.1.2006 Репутация: 79 Всего: 250 |
чего то я не догоню какое отношение имеет в данном задании наследник к списку (помимо того, что уже обусловенно полиморфизмом) ?
|
|||
|
||||
baldina |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 3433 Регистрация: 5.12.2007 Где: Москва Репутация: 15 Всего: 101 |
важный вопрос, является ли derived : public base или derived : private base.
в первом случае реализуется List, хранящий указатели на base и c равным успехом применяемый к объектам любого из этих классов, вместе или по отдельности. если наследование закрытое, то требуется другая реализация List: либо при помощи шаблона (что имхо лучше), либо List, хранящий void* + приведения типа при использовании элементов списка. вопросов, конечно, больше, например, отличается ли в случае derived : public base только полиморфным поведением, т.е. потребуется ли в каких-то случаях приведение типа. все эти вопросы в общем виде решаются, если написать упрощенный аналог std::list<> т.к. SlowCheetah использовать std::list<> не хочет, скорее всего от него требуется List, хранящий указатели на base. что-то вроде
SlowCheetah, class List не может быть ни базовым, ни производным от base либо derived ибо не связан с ними ни отношением "является", ни "реализован посредством". Он хранит объекты этого типа, он - контейнер, ему по большому счету все-равно что эти классы из себя представляют. |
|||
|
||||
Shooroop |
|
||||||||||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 75 Регистрация: 28.4.2008 Где: Красноярск Репутация: нет Всего: 2 |
почему?? Добавлено через 8 минут и 48 секунд
Согласен множественное наследование я особо бы не использовал обратите внимание каждый класс заносится в список разными методами. Возможно классы надо будет по разному интерпретировать и обрабатывать. Тоже и при выводе списка. Смысл такой: сначала класс идентифицируется, а потом выполняются функции специфичные для него. |
||||||||||
|
|||||||||||
![]() ![]() ![]() |
Правила форума "C/C++: Для новичков" | |
|
Запрещается! 1. Публиковать ссылки на вскрытые компоненты 2. Обсуждать взлом компонентов и делиться вскрытыми компонентами
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, JackYF, bsa. |
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | C/C++: Для новичков | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |