28 / 27 / 7
Регистрация: 11.06.2011
Сообщений: 387
1

Как определить к какому классу принадлежит переданный объект ?

07.08.2017, 07:21. Показов 10240. Ответов 7
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
например есть классы и метод передающий класс, который наследовался от другого класса. Как узнать какой класс передали ?

Может по коду будет понятней.
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
class body {
   int value;
}
 
class a : public body {
   int x;
}
class b : public body {
   int x;
}
 
void func(){
   a *foo = new a();
   myMethod(foo);
}
 
void myMethod(body *obj){
   // как тут узнать какой класс в obj ? a или b ?
}
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
07.08.2017, 07:21
Ответы с готовыми решениями:

Узнать к какому классу принадлежит объект
class Base{ }; class Child1:public Base{ }; class Child2:public Base{ }; class...

В некоторый момент программы нужно узнать, к какому классу принадлежит объект
В некоторый момент программы мне нужно узнать, к какому классу принадлежит объект. Вот допустим, у...

Как из общего списка получить элементы одного класса? или как определить к какому классу принадлежит объект?
суть вопроса: Есть матрица. в ней хранятся ссылки на элементы класса и его наследников (в этом...

Какому классу принадлежит метод BeginInvoke()
На первый взгляд вопрос может показаться банальным, но вот в чем дело. Создаем любой делегат (какие...

7
Любитель чаепитий
3742 / 1798 / 566
Регистрация: 24.08.2014
Сообщений: 6,016
Записей в блоге: 1
07.08.2017, 07:25 2
по typeid.
но это, обычно, не требуется.
иначе зачем полиморфизм применять?
0
28 / 27 / 7
Регистрация: 11.06.2011
Сообщений: 387
07.08.2017, 07:35  [ТС] 3
typeid выдает базовый класс.

чтобы в зависимости от класса вызывать дополнительные методы, которых нет в базовом.
0
Любитель чаепитий
3742 / 1798 / 566
Регистрация: 24.08.2014
Сообщений: 6,016
Записей в блоге: 1
07.08.2017, 08:41 4
Цитата Сообщение от admsasha Посмотреть сообщение
typeid выдает базовый класс.
как проверяете?
у меня всё работает.
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
#include <iostream>
#include <typeinfo>
 
struct Base
{
    virtual ~Base() {}
};
 
struct Der1 : public Base
{};
 
struct Der2 : public Base
{};
 
void foo(Base * obj)
{
   std::cout << std::boolalpha << (typeid(*obj) == typeid(Der1));
}
 
int main()
{
    Base * obj = new Der1;
    foo(obj);
}
1
28 / 27 / 7
Регистрация: 11.06.2011
Сообщений: 387
07.08.2017, 08:45  [ТС] 5
std::cout << typeid(obj).name()
0
Любитель чаепитий
3742 / 1798 / 566
Регистрация: 24.08.2014
Сообщений: 6,016
Записей в блоге: 1
07.08.2017, 08:47 6
Цитата Сообщение от admsasha Посмотреть сообщение
std::cout << typeid(obj).name()
1. это выдаёт не базовый класс, а указатель на базовый класс, чем он и является.
2. разыменуйте указатель при передаче в оператор typeid, чтобы тип нормально определялся.
0
28 / 27 / 7
Регистрация: 11.06.2011
Сообщений: 387
07.08.2017, 08:49  [ТС] 7
Цитата Сообщение от GbaLog- Посмотреть сообщение
2. разыменуйте указатель при передаче в оператор typeid, чтобы тип нормально определялся.
Так в том то и проблема. А во что ? В класс a или в класс b ?
0
Любитель чаепитий
3742 / 1798 / 566
Регистрация: 24.08.2014
Сообщений: 6,016
Записей в блоге: 1
07.08.2017, 08:57 8
Цитата Сообщение от admsasha Посмотреть сообщение
А во что ? В класс a или в класс b ?
в смысле "во что"?
вы знаете, что такое разыменование указателя?
https://ru.wikipedia.org/wiki/... 0.BC.D0.B8
Языки программирования, в которых предусмотрен тип указателей, содержат, как правило, две основные операции над ними: присваивание и разыменование. Первая присваивает указателю некоторый адрес. Вторая служит для обращения к значению в памяти, на которое указывает указатель.
смотрите, как в данном мною примере(#4) сравнивается.
0
07.08.2017, 08:57
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
07.08.2017, 08:57
Помогаю со студенческими работами здесь

Какому классу по Хомскому принадлежит грамматика?
Люди помогите Какому классу по Хомскому принадлежит грамматика c правилами S → AS|ε; A → a|b?

Какому классу по Хомскому принадлежит грамматика?
Люди помогите Какому классу по Хомскому принадлежит грамматика из правилами S → AS|ε; A → a|b?

WPF: узнать к какому классу принадлежит тот или иной элемент управления
Решил попробовать WPF после Windows Forms. Подскажите, если кто знает - как под WPF узнать к какому...

Как определить, к какому классу относится элемент массива?
Добрый вечер. Задача следующая: существует абстрактный класс, который наследуется в нескольких...

К какому элементу листа классов принадлежит объект?
Вот есть примерно такой код. Как в событии нажатия клавиши определить к какому элементу листа...

Как определить какому элементу принадлежит общее контекстное меню?
Всем здравствуйте. На форме есть два однотипных элемента (например Button1 и Button2). Каждому...


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

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

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