Форум программистов, компьютерный форум CyberForum.ru

Как узнать, какого типа объект находится по указателю - C++

Восстановить пароль Регистрация
 
 
Рейтинг: Рейтинг темы: голосов - 35, средняя оценка - 4.71
Sanek911
4 / 4 / 0
Регистрация: 04.12.2009
Сообщений: 42
26.03.2012, 23:31     Как узнать, какого типа объект находится по указателю #1
Есть массив указателей базового класса, нужно узнать какие типы этих объектов.
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
class Shape{
public:
  ~Shape(){}
  virtual void Draw() = 0;
};
class Triangle : public Shape{
  virtual void Draw(){}
};
class Circle : public Shape{
  virtual void Draw(){}
};
class Square : public Shape{
  virtual void Draw(){}
};
 
void main()
{
  std::vector<Shape *> vec;
  for(int i = 0; i < 10; i++){
    if ((i % 3) == 0)
      vec.push_back(new Triangle());
    if ((i % 3) == 1)
      vec.push_back(new Circle()); 
    if ((i % 3) == 2)
      vec.push_back(new Square());
  }
//предложите код который поможет узнать типы объектов в векторе
}
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
26.03.2012, 23:31     Как узнать, какого типа объект находится по указателю
Посмотрите здесь:

C++ как удалить объект по указателю на базовый класс?
C++ не удаётся создать безымянный объект типа vector моего типа
интерфейс, в методе которого создается объект типа IDictionary и возвращается ссылка на этот объект C++
C++ объясните пожалуйста: tz какого типа
C++ Как записать объект с полем типа std::string в бинарном виде в файл и считать его обратно?
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
VIKT0R
21.02.2015, 16:41     Как узнать, какого типа объект находится по указателю
  #21

Не по теме:

Нет такого слова "идеома", правильно идиома.

После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Voivoid
 Аватар для Voivoid
580 / 256 / 12
Регистрация: 31.03.2013
Сообщений: 1,284
21.02.2015, 17:18     Как узнать, какого типа объект находится по указателю #22
Цитата Сообщение от Завернин Посмотреть сообщение
Полагаю, вряд ли можно сделать коллекцию из элементов variant<line, arc?
А зря. Вполне себе можно сделать че-нить типа такого:

C++
1
2
3
4
std::vector<boost::variant<Arc, Line>> elements;
elements.push_back( Arc{} );
elements.push_back( Line{} );
intersects( elements[0], elements[1] );
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
24.02.2015, 10:52     Как узнать, какого типа объект находится по указателю
Еще ссылки по теме:

C++ Какого типа у нас *point ?
Как узнать, находится ли std::cout в hex-режиме? C++
Как передавать значения строкового типа в конструктор через объект класса? C++

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

Или воспользуйтесь поиском по форуму:
Завернин
1 / 1 / 0
Регистрация: 22.12.2013
Сообщений: 27
24.02.2015, 10:52     Как узнать, какого типа объект находится по указателю #23
Цитата Сообщение от hoggy Посмотреть сообщение
Однако, мои знания шаблонов с++ дают мне основание полагать,
что подобный дизайн реален. Хотя работа не на один вечер.
Любопытный способ.
Резюме к теме:
Лично я сделал для себя вывод, что двойная диспетчеризация более правильна с точки зрения программирования и быстродействия, чем динамик касты (Хотя для простых случаев быстродействие еще стоит протестить).
Также такой подход никак не влияет на необходимость иметь или не иметь абстрактные коллекции, скорее только поощряет их применение. А если столкнусь с примером, в котором однозначно необходимы динамик касты, то выложу его сюда.
Yandex
Объявления
24.02.2015, 10:52     Как узнать, какого типа объект находится по указателю
Ответ Создать тему
Опции темы

Текущее время: 09:11. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru