Название: Массив объектов разных классов Отправлено: deaks от Ноябрь 13, 2010, 12:04 Здравствуйте!
Имеется задача - есть класс A от него наследуются классы a1, a2, a3... В свою же очередь существует некий класс B, который включает массив из объектов наследуемых классов класса А. сейчас у меня примерно такая структура Код: class A массив объявил как QVector<A* > m_arrA и в классе B пишу в него так: Код: A* obj_a = new a1(); данная штука работает - то есть переходит в конкретный метод наследуемого класса и все пишет. но как в таком случае можно реализовать get-методы из такого массива? Название: Re: Массив объектов разных классов Отправлено: Пантер от Ноябрь 13, 2010, 12:08 Зачем m_arrA.append((a1*)obj_a); если нужно m_arrA.append(obj_a);?
А что тебя смущает с get? Название: Re: Массив объектов разных классов Отправлено: deaks от Ноябрь 13, 2010, 12:09 пожалуй я сам разобрался пока писал этот пост)))
Название: Re: Массив объектов разных классов Отправлено: deaks от Ноябрь 13, 2010, 12:11 Зачем m_arrA.append((a1*)obj_a); если нужно m_arrA.append(obj_a);? я так делал чтобы можно было в отладчике креатора отследить по вотч листу данный массив. иначе он состоит из объектов класса A. хотя мой способ всеравно не работает))) Название: Re: Массив объектов разных классов Отправлено: deaks от Ноябрь 13, 2010, 12:19 а чтобы выполнить какое-нибудь действие для элемента такого массива можно обойтись невиртуальным методом?
что-нибудь в таком духе - Код: QString tmp_str = ((a1*)m_arrA[i])->getStr(); Название: Re: Массив объектов разных классов Отправлено: Пантер от Ноябрь 13, 2010, 12:23 А что мешает?
П.С. И используй dynamic_cast вместо сишного приведения. Все таки на плюсах пишешь. Название: Re: Массив объектов разных классов Отправлено: deaks от Ноябрь 13, 2010, 12:28 разобрался)просто неверные данные на вход подавал)
как можно в вотч листе креатора отображать наследуемые классы? а то у меня только для базового пишет Название: Re: Массив объектов разных классов Отправлено: deaks от Ноябрь 13, 2010, 12:51 П.С. И используй dynamic_cast вместо сишного приведения. Все таки на плюсах пишешь. я dynamic_cast только при удалении делаю)исправим-с Название: Re: Массив объектов разных классов Отправлено: Igors от Ноябрь 13, 2010, 16:56 я dynamic_cast только при удалении делаю)исправим-с Проще и надежнее объявить деструктор A virtualНазвание: Re: Массив объектов разных классов Отправлено: deaks от Ноябрь 14, 2010, 21:37 я dynamic_cast только при удалении делаю)исправим-с Проще и надежнее объявить деструктор A virtualа можно подробней?виртуальный деструктор? Оо Название: Re: Массив объектов разных классов Отправлено: Igors от Ноябрь 15, 2010, 14:49 а можно подробней?виртуальный деструктор? Оо Да уж жевано-пережевано :) ПримерКод
Теперь если так Код То все нормально, вызовется деструктор A1 (а потом деструктор A) Но если так Код То вызовется только деструктор A и a->data удалено не будет (утечка). Поэтому надо объявлять деструктор базового объекта virtual если планируется пользовать указатели на порожденные классы Название: Re: Массив объектов разных классов Отправлено: deaks от Ноябрь 15, 2010, 18:13 вот вы про что) спасибо! =)
|