|
|
Регистрация Восстановить пароль |
Повторная активизация e-mail |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
|
|
Опции темы | Поиск в этой теме |
18.01.2012, 11:51 | #1 |
Пользователь
Регистрация: 04.12.2011
Сообщений: 13
|
Правильна ли такая реализация списка из указателей на базовый класс?
Есть вот такая вот структура, являющаяся элементом списка
Код:
void show();. От него наследованы несколько классов, в каждом их которых переопределена эта функция. Элемент списка создается в общем случае таким способом: Код:
Правильна ли такая реализация прохода списка с вызовом show(); для всех элементов? Код:
Последний раз редактировалось Archet; 18.01.2012 в 11:56. |
18.01.2012, 11:59 | #2 |
Участник клуба
Регистрация: 18.10.2008
Сообщений: 1,409
|
да. функция будет вызвана благодаря виртуальной таблице, в которой хранятся указатели на требуемые функции
|
18.01.2012, 12:02 | #3 |
Пользователь
Регистрация: 04.12.2011
Сообщений: 13
|
Однако что-то у меня явно не так, ибо программа падает при попытке вообще любого обращения вида
Код:
Ни о какой конкретной ошибке не сигналит, слетает с лаконичным "Прекращена работа программы". Что может вызывать подобную проблему? Последний раз редактировалось Archet; 18.01.2012 в 12:11. |
18.01.2012, 12:17 | #4 | |
Старожил
Регистрация: 16.12.2011
Сообщений: 2,329
|
Цитата:
|
|
18.01.2012, 12:20 | #5 |
Пользователь
Регистрация: 04.12.2011
Сообщений: 13
|
Резонно.
Тогда совсем уж идиотский вопрос - как в Win7 при использовании Dev C++ добиться более подробных комментариев о причинах закрытия программы? Нет, на гугле меня не банили. Но найти что-то по этому вопросу не получается. Последний раз редактировалось Archet; 18.01.2012 в 12:28. |
18.01.2012, 12:28 | #6 | |
Старожил
Регистрация: 16.12.2011
Сообщений: 2,329
|
Цитата:
Локализируй проблему: сделай отдельный мини-проект, с минимум исходного кода, и выложи сюда. Нужно видеть весь код, а не обрывки, что бы понять что именно не так. /ps в приведенных выше фрагментах есть что-то такое "фейловое". Общее впечатление, что у тебя конструкция переосложнена по причине нарушения инкапсуляции. Допустим, ты сделал связанный список (аналог std::list) Связанный список - это контейнер, который умеет хранить внутри себя элементы, не утруждая себя деталями их внутренней реализации. А ты взял и вынес виртуальный(!) метод за пределы самого элемента, свалив его на голову многострадального списка. Ты уверен, что это именно то, что тебе было нужно? Почему твой контейнер оказывается должен знать детали реализации подопечных объектов, и учитывать особенности их строения? |
|
18.01.2012, 12:34 | #7 |
Участник клуба
Регистрация: 18.10.2008
Сообщений: 1,409
|
Archet, как создается список? может там нулевой указатель?
Попробуй заверни проблемный код в try/catch |
18.01.2012, 12:39 | #8 | |
Пользователь
Регистрация: 04.12.2011
Сообщений: 13
|
Мини-проект сейчас сделаю.
А пока еще один вопрос: _Bers, как в общих чертах должна выглядеть правильная реализация такого списка и вызов этого виртуального метода для содержащихся в нем объектов класса-потомка? Цитата:
Try\catch сейчас тоже испытаю. Последний раз редактировалось Archet; 18.01.2012 в 12:45. |
|
18.01.2012, 13:11 | #9 |
Пользователь
Регистрация: 04.12.2011
Сообщений: 13
|
Итак, через try-catch ничего так и не поймал. Как молча падало, так и падает.
А вот запрошенный код мини-проекта. В правильной работе функций добавления элемента и задания полей класса я уверен (эти функции протестировались нормально, без каких-либо ошибок), поэтому привожу их в максимально простом и коротком виде для 2х полей типа int. Код:
|
18.01.2012, 13:51 | #10 | |
Участник клуба
Регистрация: 18.10.2008
Сообщений: 1,409
|
Цитата:
Говорил я, что указатель нулевой? Почему отладчиком не прошелся? Код:
Код:
|
|
|
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Абстрактный базовый класс(задача) | friman134 | Общие вопросы C/C++ | 2 | 17.12.2011 21:51 |
АТД: Реализация списка с использованием указателей | Suslik963 | Помощь студентам | 1 | 17.11.2010 10:06 |
результат базовый класс и наследование | Пепел Феникса | Общие вопросы C/C++ | 1 | 21.09.2010 02:29 |
Создать базовый класс | sT1mfy | Общие вопросы Delphi | 3 | 11.06.2010 21:38 |
Вернут указатель на базовый класс | Crucian | Общие вопросы C/C++ | 2 | 08.11.2007 18:10 |