|
|
Регистрация Восстановить пароль |
Повторная активизация e-mail |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
|
Опции темы | Поиск в этой теме |
16.11.2014, 20:17 | #1 |
Пользователь
Регистрация: 25.11.2013
Сообщений: 26
|
Абстрактный класс динамического списка
Доброго времени суток, пытаюсь разобраться с абстрактными классами. Прочитала материал, с простыми примерами разобралась, а вот выполнить свою задачу не могу
Спроектировать абстрактный класс, в моем случаи класс Контейнер, затем создать класс потомок этого класса и продемонстрировать работу с ним с помощью функций. Класс контейнер попыталась создать, от него создала один дочерний - Список. Определила все функции класса-предка как чисто виртуальные. Программа не работает. Явно что-то не так, но не могу понять. Помогите, пожалуйста. Код:
|
16.11.2014, 22:38 | #2 |
Старожил
Регистрация: 22.05.2007
Сообщений: 9,065
|
Не работает - это:
а) Не компилируется и что-то конкретное пишет. б) Компилируется, но при запуске падает с какой-нибудь ошибкой. в) Работает, но выдаёт неверный результат. какой правильный вариант? |
16.11.2014, 22:48 | #3 |
Пользователь
Регистрация: 25.11.2013
Сообщений: 26
|
А конкретно:
error LNK2019: ссылка на неразрешенный внешний символ "public: virtual __thiscall Container::~Container(void)" (??1Container@@UAE@XZ) в функции "public: virtual __thiscall List::~List(void)" (??1List@@UAE@XZ) и error LNK1120: 2 неразрешенных внешних элементов |
16.11.2014, 22:56 | #4 |
Старожил
Регистрация: 22.05.2007
Сообщений: 9,065
|
Деструктор контейнера не реализовали. Добавьте:
Код:
|
16.11.2014, 23:05 | #5 |
Пользователь
Регистрация: 25.11.2013
Сообщений: 26
|
Ага, спасибо большое, еще был конструктор не реализован в контейнере. Исправила - работает. Просто особых изменения не вижу в работе проги, по сравнению с тем, когда класс Список был единственных и не состоял в отношении наследования.
А можете, пожалуйста, пробежаться взглядом по тексту проги? А то я не уверенна в ее правильности. Можно ли вообще обнулять все функции в классе контейнер(как у меня)? Или это бессмыслица?) |
17.11.2014, 08:09 | #6 | |
Старожил
Регистрация: 22.05.2007
Сообщений: 9,065
|
Цитата:
Указателям кошернее присваивать значение NULL, но по сути никакой разницы с нулём обычно нет. В деструкторе списка утечка памяти будет (удаляется только 2 элемента - голова и хвост), лучше просто в нём вызывать deleteall. Про tail везде забыто, так что с ним тоже полезут ошибки (в erase можем удалить как голову, так и хвост, а этот момент не контролируется). Это обнуление именно что показывает абстрактность методов, т.е. что для них нет и не будет реализации. Так что оно не только можно, но и нужно. И да, абстрактный класс не обязательно должен состоять только из абстрактных методов. Достаточно одного абстрактного метода, чтобы класс из "обычного" стал абстрактным. Абстрактный он потому, что нельзя создавать экземпляры этого класса. |
|
17.11.2014, 18:28 | #7 | |||||
Санитар
Старожил
Регистрация: 04.10.2008
Сообщений: 2,577
|
Цитата:
Опечатка?: Цитата:
Цитата:
Ну и да, как выше писали - если элементв больше двух - утекает память. Ты описала деструктор при объявлении класса, я не думаю что это хорошая идея. Ну т.к. такие функции претендуют на то, чтобы быть inline, я не знаю как сработает каждый конкретный компилятор и что в стандарте написано про inline деструктор, но идея явно плохая. СЕРЬЕЗНЕЙ: Цитата:
Тут прикинь, что ты удаляешь последний элемент (456) из списка [123->456->null] ptr указывает на 456 prevPtr - на 123 Цитата:
-----------------добавил: ЗЫ: я в код не вчитывался, тут явно гораздо больше ошибок, чем я описал - написал лишь то, что сразу бросилось в глаза. Последний раз редактировалось rrrFer; 17.11.2014 в 18:31. |
|||||
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Абстрактный класс | Сырги | C# (си шарп) | 3 | 22.11.2012 01:13 |
абстрактный класс | meta13 | C# (си шарп) | 2 | 22.03.2012 19:14 |
c# абстрактный класс | tanek | Помощь студентам | 1 | 22.02.2012 11:23 |
Указатель на абстрактный класс | zhenya.ya | Общие вопросы C/C++ | 0 | 11.11.2010 23:51 |
абстрактный класс С++ | zhenya.ya | Помощь студентам | 0 | 05.11.2010 20:23 |