32 / 4 / 0
Регистрация: 22.06.2011
Сообщений: 88
1

Контейнер и получение динамических объектов

01.09.2012, 22:35. Показов 1037. Ответов 12
Метки нет (Все метки)

Привет.
Как можно грамотно с точки зрения ООП реализовать класс-контейнер, где будут хранится объекты?
Объекты не однотипные, а наследники.
Нужно будет грамотно манипулировать(получать, сортировать итд итп) объектами по наследованному типу.
Ваши идеи и примеры.
Благодарю
__________________
Помощь в написании контрольных, курсовых и дипломных работ, диссертаций здесь
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
01.09.2012, 22:35
Ответы с готовыми решениями:

Удаление динамических объектов
есть программа, в которой реализован список объектов, создающиеся динамически. Перед вами функция,...

Контейнер list из указателей объектов
Есть абстрактный класс и производный от него.В производном переопределяется вирт ф-ия draw()....

Декларирование атрибутов динамических объектов
Здравствуйте. Пишу шахматную программу. Решил использовать динамические объекты. Проблема...

STL вектор динамических объектов
Нужно время от времени ложить в std::vector (или std::list) динамические объекты. Под динамическим...

12
Каратель
Эксперт С++
6605 / 4024 / 401
Регистрация: 26.03.2010
Сообщений: 9,273
Записей в блоге: 1
01.09.2012, 22:47 2
контейнер с указателями на базовый класс
1
87 / 87 / 1
Регистрация: 19.06.2012
Сообщений: 245
01.09.2012, 23:31 3
Бинго.
А вообще - разве так много вариантов? Вопрос уже содержит ответ сам по себе.
0
32 / 4 / 0
Регистрация: 22.06.2011
Сообщений: 88
01.09.2012, 23:32  [ТС] 4
Ну это то понятно.
А какой тип списка лучше использовать в качестве хранение объектов?
Как методами шаблонов реализовать функций для манипулирование объектами?
допустим я хочу перебрать всех Cat из базового Animal
C++
1
2
3
4
5
for(AnimalContainer::iterator it = animals.begin(); it != animals.end();++it)
{
    if((*it) == dynamic_cast<Cat*>(*it))
        it->Birth();
}
получается очень грубо.
Нужен более масштабный, шаблонный и красивый вариант.

Примеры в студию пожалуйста
0
87 / 87 / 1
Регистрация: 19.06.2012
Сообщений: 245
01.09.2012, 23:43 5
Можно попробовать через typeid.

З.Ы. dynamic_cast кинет экзепшн если там не Cat*
0
В астрале
Эксперт С++
8042 / 4799 / 655
Регистрация: 24.06.2010
Сообщений: 10,562
01.09.2012, 23:45 6
vendeme, Виртуальный интерфейс и все будет работать красиво.

Добавлено через 32 секунды
PSIAlt, dynamic_cast не кидает исключений, при работе с указателями.
0
32 / 4 / 0
Регистрация: 22.06.2011
Сообщений: 88
01.09.2012, 23:52  [ТС] 7
Цитата Сообщение от PSIAlt Посмотреть сообщение
Можно попробовать через typeid.
Грубый вариант

Цитата Сообщение от ForEveR Посмотреть сообщение
vendeme, Виртуальный интерфейс и все будет работать красиво.
в смысле?

Как перебрать сразу только Cat*, а не весь список. Ну или иные идеи.
0
В астрале
Эксперт С++
8042 / 4799 / 655
Регистрация: 24.06.2010
Сообщений: 10,562
01.09.2012, 23:58 8
vendeme, А зачем перебирать только Cat*? Только Cat* исключительно dynamic_cast_ом. Что есть виртуальный интерфейс? Некий базовый абстрактный класс с виртуальными (чисто-виртуальными) функциями, которые переопределяются в производных классах, извне работаем через виртуальный интерфейс. Ну или NVI http://insidecpp.ru/patterns/nonvirtual_interface/
0
32 / 4 / 0
Регистрация: 22.06.2011
Сообщений: 88
02.09.2012, 00:21  [ТС] 9
А, абстрактный клас, так бы сразу сказали, ясно.

Вот в одном проекте как идёт проверка объектов шаблоном
C++
1
2
    if(Cat* pCat = HashMap<Cat>::Find(CatGUID()))
        pCat->Birth();
Добавлено через 2 минуты
ну или
C++
1
2
3
for(it = deadAnimals.begin(); it != deadAnimals.end();++it)
    if(Cat* pCat = HashMap<Cat>::Find(*it->GetGUID())
        pCat->Birth();
Добавлено через 3 минуты
Как построить такой класс-синглтон(ну или статический)?
Какой STL список лучше использовать для хранение указателей на объектов?
0
87 / 87 / 1
Регистрация: 19.06.2012
Сообщений: 245
02.09.2012, 00:25 10
Цитата Сообщение от vendeme Посмотреть сообщение
Какой STL список лучше использовать для хранение указателей на объектов?
Зависит от того какие действия тебе от него нужны. Частая вставка/удаление, только в конец или нет, частый ли поиск, непрерывность итд
1
Эксперт С++
8380 / 6141 / 615
Регистрация: 10.12.2010
Сообщений: 28,683
Записей в блоге: 30
02.09.2012, 01:26 11
C++
1
2
3
4
5
6
7
8
9
for(AnimalContainer::iterator it = animals.begin(); it != animals.end();++it)
{ 
   Cat* murzik= NULL;
   murzik= dynamic_cast<Cat*>(*it) ;
   if (murzik != NULL )  
    {
      murzik ->Birth();
    }  
}
Добавлено через 4 минуты
Есть еще вариант в базовом классе создать нечто вроде поля "имя" и проверять его

C++
1
2
3
4
5
6
7
for(AnimalContainer::iterator it = animals.begin(); it != animals.end();++it)
{ 
   if (  (*it)->name == "cat" )  
    {
       (*it)->Birth();
    }  
}
0
32 / 4 / 0
Регистрация: 22.06.2011
Сообщений: 88
02.09.2012, 03:50  [ТС] 12
Цитата Сообщение от Avazart Посмотреть сообщение
C++
1
2
3
4
5
6
7
8
9
for(AnimalContainer::iterator it = animals.begin(); it != animals.end();++it)
{ 
   Cat* murzik= NULL;
   murzik= dynamic_cast<Cat*>(*it) ;
   if (murzik != NULL )  
    {
      murzik ->Birth();
    }  
}
Добавлено через 4 минуты
Есть еще вариант в базовом классе создать нечто вроде поля "имя" и проверять его

C++
1
2
3
4
5
6
7
for(AnimalContainer::iterator it = animals.begin(); it != animals.end();++it)
{ 
   if (  (*it)->name == "cat" )  
    {
       (*it)->Birth();
    }  
}
тему не читал, пост запостил?
Если сравнивать по типу, то уж лучше тип объявить как enum.
Я уже говорил грубый что вариант
0
Эксперт С++
8380 / 6141 / 615
Регистрация: 10.12.2010
Сообщений: 28,683
Записей в блоге: 30
02.09.2012, 03:55 13
Цитата Сообщение от vendeme Посмотреть сообщение
тему не читал
По огрызкам кода не понятно что такое GetGUID() ...
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
02.09.2012, 03:55
Помогаю со студенческими работами здесь

Динамический массив динамических объектов
Физически задача поставлена так: есть узел который состоит из разных деталей, количество деталей...

Создать контейнер list объектов класса
Здравствуйте! Подскажите, пожалуйста, почему у меня выводятся адреса, вместо значения? У меня...

Понятие принципа создания динамических объектов
Например я написал такой код: #include &lt;iostream&gt; #include &lt;string&gt; using namespace std; ...

Запись и чтение динамических объектов в файл
Как быть, че делать? Особенно при чтение файла, ведь неизвестно какого он размера. И как бы все это...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
13
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2022, CyberForum.ru