Модераторы: bsa
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> typeid выдает P4Base вместо Base !? 
:(
    Опции темы
Gtar
Дата 5.8.2008, 17:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 8
Регистрация: 14.1.2008

Репутация: нет
Всего: нет



Здравствуйте.
При попытке определения типа объекта с использованием typeid, 
нижеприведенный код выдаёт "P4Base".
Вопрос:Что означает приставка Р4?  Поиск гуглом ничего внятного не дал.

Win XP, Dev C++ (default compiler).
также пробовал компилить в Solaris OS 10 и Ubuntu, используя gcc 4.2 .
Результат тот же.

Код

#include<iostream>
#include<typeinfo>
using namespace std;

class Base {};
class Derived: public Base {};

int main(){
  Base* arr;
  arr = new Derived;
  cout<< typeid(arr).name()<<endl;
  delete arr;
  system("pause");    
return 0;
}




PM MAIL   Вверх
vinter
Дата 5.8.2008, 18:13 (ссылка) |    (голосов:2) Загрузка ... Загрузка ... Быстрая цитата Цитата


Explorer
****


Профиль
Группа: Завсегдатай
Сообщений: 2735
Регистрация: 1.4.2006
Где: Н.Новгород

Репутация: 8
Всего: 56



то что возвращается методом name() не означает имя класса, это может быть все что угодно, это зависит от реализации.  НЕдавно в соседней ветке, было обсуждение этого.


--------------------
Мой блог
PM MAIL WWW   Вверх
Annihilator
Дата 5.8.2008, 21:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


bytegrinder
**


Профиль
Группа: Участник
Сообщений: 493
Регистрация: 21.11.2006
Где: Омск

Репутация: 1
Всего: 3



1. Сделай Base полиморфным (добавь туда виртуальную функцию)
2. Напиши так   
Код

cout<< typeid(*arr).name()<<endl;

а если я пишу так
Код

cout<< typeid(arr).name()<<endl;

у меня выдает class Base *
работаю в VS2008
По этой теме читай здесь

Это сообщение отредактировал(а) Annihilator - 5.8.2008, 21:09


--------------------
Если вы не можете сделать хоpошyю пpогpаммy, сделайте, чтобы она по кpайней меpе выглядела хоpошо
PM ICQ   Вверх
Gtar
Дата 6.8.2008, 05:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 8
Регистрация: 14.1.2008

Репутация: нет
Всего: нет



1. Изначальный код и был полиморфным, это я просто упростил для примера, что бы не копипастить 100 строчек ненужного кода smile
2. Если пишу так :cout<< typeid(*arr).name()<<endl; 
   то выдает "4Base"... То есть уже без "P" но 4-ка все еще тут...
3. В VS хотя бы вывод понятный...   А то что у меня получилось.... "P" скорее всего указывает на то что это pointer, а  вот "4" - понятия не имею...  кста, у меня не Pentium4  smile 

В общем после прочтения доков и соседнего топика, можно сделать вывод что typeid().name() если и использовать то лучше только для отладки, но не для хардкорного юзания в программе, так как ее вывод зависит от компилятора и может быть нестабилен...


PS: странно что в многих учебниках  и референсах это не пишут... 

Это сообщение отредактировал(а) Gtar - 6.8.2008, 05:09
PM MAIL   Вверх
xvr
Дата 6.8.2008, 11:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 7046
Регистрация: 28.8.2007
Где: Дублин, Ирландия

Репутация: 35
Всего: 223



Цитата(Gtar @ 6.8.2008,  05:07)
2. Если пишу так :cout<< typeid(*arr).name()<<endl; 
   то выдает "4Base"... То есть уже без "P" но 4-ка все еще тут...
3. В VS хотя бы вывод понятный...   А то что у меня получилось.... "P" скорее всего указывает на то что это pointer, а  вот "4" - понятия не имею...

4 - длинна Base в символах
Можно присобачить префикс _Z к строке от typeid().name() и програть ее через функцию __cxa_demangle, получишь читаемое имя


Это сообщение отредактировал(а) xvr - 6.8.2008, 11:31
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "C/C++: Для новичков"
JackYF
bsa

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, JackYF, bsa.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Для новичков | Следующая тема »


 




[ Время генерации скрипта: 0.0429 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.