![]() |
|
Модераторы: Daevaorn |
![]()
|
|
| LLIypik |
|
|||
|
Unregistered |
У меня два класса: базовый и потомок. И указатель на объект какого-то из этих классов.
Как мне определить какого класса этот объект? Спасибо. |
|||
|
||||
| automax |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 54 Регистрация: 30.9.2002 Репутация: нет Всего: нет |
Можно так
potomok* mypot=dynamic_cast<potomok*>p_pointer; Если указатель p_pointer не потомок, то mypot будет равняться 0. А иначе p_pointer потомок. Точно также можно проверить на базовый класс. |
|||
|
||||
| mr.DUDA |
|
|||
|
3D-маньяк ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 8244 Регистрация: 27.7.2003 Где: город-герой Минск Репутация: 25 Всего: 232 |
P.S., automax, это будет работать только если в классе хотя бы одна функция виртуальная, т.е. существует vtable (dynamic_cast сравнивает указатели на vtable).
-------------------- ![]() |
|||
|
||||
| automax |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 54 Регистрация: 30.9.2002 Репутация: нет Всего: нет |
Да, но зачем иерархия без виртуальных методов.
|
|||
|
||||
| DENNN |
|
|||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 3878 Регистрация: 27.3.2002 Где: Москва Репутация: 1 Всего: 43 |
Хотя бы затем, чтоб иметь один исходный класс с данными и наследовать от него разные по функциональной обработке классы-потомки. Тогда при изменении видов данных достаточно модифицировать исходный класс. Вообще то наследование удобно не только из- за виртуальных методов, но и для того, чтоб явно разделить функциональность отдельных частей программы. К примеру к твоей длл идет заголовочный файл, в котором помимо экспортируемых функций описан еще и класс для обмена данными, их инициализации и пр. Но в самом коде возможно удобней наследовать потомка и добавить к нему новые методы, о которых знать пользователю длл совсем не обязательно. Мда, а если ближе к теме, то заданный тобой вопрос относится к теме RunTimeTypeInformation ( RTTI ) - поищи в сети по этому слову. |
|||
|
||||
| Nastya |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 1287 Регистрация: 27.3.2002 Где: Мариуполь Репутация: 5 Всего: 44 |
typeid
-------------------- Что бы понять рекурсию, надо понять рекурсию "Профессионал - это человек сделавший все возможные ошибки в очень узкой области". Н.Бор |
|||
|
||||
![]()
|
| Правила форума "С++:Общие вопросы" | |
|
|
Добро пожаловать!
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | C/C++: Общие вопросы | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |