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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Опрос имени класса у обьекта ... Реально ли? 
:(
    Опции темы
sergejzr
Дата 18.3.2004, 00:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Un salsero
Group Icon


Профиль
Группа: Админ
Сообщений: 13285
Регистрация: 10.2.2004
Где: Германия г .Ганновер

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



Как реализовать возможность опроса имени класса у обьекта в С++?
  • Желательно, что бы компилер сан бы генерил мембера 'name' в классах.
  • Возможен один родитель для всех классов.
  • Необходимо, что бы работало на Юникс/Виндовс(Релиз/Дибаг).
Будут предложения?
Спасибо!



Добавлено @ 00:25
Цитата

Необходимо, что бы работало на Юникс/Виндовс(Релиз/Дибаг).

Я имел в виду конечно gcc/MSVC biggrin.gif


--------------------
PM WWW IM ICQ Skype GTalk Jabber AOL YIM MSN   Вверх
Coocky
Дата 18.3.2004, 00:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


GUI гуру
****


Профиль
Группа: Участник Клуба
Сообщений: 2879
Регистрация: 16.2.2004
Где: Украина. Запорожь е

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



Я че-то не понял
Цитата
Желательно, что бы компилер сан бы генерил мембера 'name' в классах.
Возможен один родитель для всех классов.
Необходимо, что бы работало на Юникс/Виндовс(Релиз/Дибаг

это вопросы или задачи?
Я никогда не слышал,что б обьект предналежал нескольким классам notify.gif
Цитата
Возможен один родитель для всех классов

Если ошибаюсь,буду учить Турбо Паскаль biggrin.gif

Это сообщение отредактировал(а) Coocky - 18.3.2004, 00:39


--------------------
Верю в смерть после жизни, в любовь после секса ,в крем после бритья smile        
PM ICQ   Вверх
sergejzr
Дата 18.3.2004, 00:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Un salsero
Group Icon


Профиль
Группа: Админ
Сообщений: 13285
Регистрация: 10.2.2004
Где: Германия г .Ганновер

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



To Coocky
Цитата

это вопросы или задачи?

скорее соображения.

По пунктам:
1:
Цитата

Желательно, что бы компилер сан бы генерил мембера 'name' в классах

если возможно заставить компилер генерить мембера, то вопрос исчерпан.
2:
Цитата

Возможен один родитель для всех классов.

Сознаюсь, пункт излишен, если разберёмся с пунктом 1.
(Имелось в виду, что "дети" унаследуют возможность родителя)
3:
Цитата

Необходимо, что бы работало на Юникс/Виндовс(Релиз/Дибаг).

это условие

Это сообщение отредактировал(а) sergej.z - 18.3.2004, 01:09


--------------------
PM WWW IM ICQ Skype GTalk Jabber AOL YIM MSN   Вверх
srd
Дата 18.3.2004, 01:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Нереварин
**


Профиль
Группа: Участник Клуба
Сообщений: 951
Регистрация: 30.8.2003
Где: Владивосток

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



Читай доки по следующим понятиям: typeid, dynamic_cast, type_info. Всё уже придуманно и велосипед изобретать не надо wink.gif


--------------------
Не смей читать мою подпись!!!
PM MAIL Jabber   Вверх
sergejzr
Дата 18.3.2004, 02:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Un salsero
Group Icon


Профиль
Группа: Админ
Сообщений: 13285
Регистрация: 10.2.2004
Где: Германия г .Ганновер

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



Дорогой srd, сердечное спасибо!

Кому надо вот пример. проверен на WIN, SUN, AIX

Цитата

#include "stdlib.h"
#include "stdio.h"

#ifdef  _WIN32
#include "typeinfo.h"
#else
#include <typeinfo>
#endif


class XY
{
public:
  XY(){}

  const char* name()
  {
   return typeid( this ).name();
   //return typeid( *this ).name();
  }
};


int main(int argc,char**argv)
{
int a,b;
XY pb;

printf("name='%s'\n",typeid( pb ).name() );
//Даже указатель видно. Какая красота!
printf("name='%s'\n",pb.name() );

return 0;
}

PS:Вообще то я ничего изобретать не собирался..
Просто подозревал, что истина где то рядом biggrin.gif

Это сообщение отредактировал(а) sergej.z - 20.4.2004, 14:09


--------------------
PM WWW IM ICQ Skype GTalk Jabber AOL YIM MSN   Вверх
OlegsDP
Дата 18.3.2004, 14:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



К сожалению, не все так радужно:

Код

#include <stdio.h>
#include <typeinfo.h>

class XY
{
 public:
   XY(){};
 public:
   const char* name()
   {
     return typeid( this ).name();
   }
};

class XY1 : public XY
{
 public:
   XY1(){};
};

void main ()
{
 XY a;
 XY1 b;

 printf("name='%s'\r\n",a.name() );
 printf("name='%s'\r\n",b.name() );
}


распечатывает:

Код

name = 'class XY *'
name = 'class XY *'


Таким образом, наследовать класс, умеющий возвратить свое имя, бесполезно, т.к. он всегда будет возвращать СВОЕ имя, а не класса, его наследующего. Это потому, что typeid - это не функция, а всего-навсего директива компилятора, такая же как sizeof.
PM MAIL   Вверх
sergejzr
Дата 18.3.2004, 15:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Un salsero
Group Icon


Профиль
Группа: Админ
Сообщений: 13285
Регистрация: 10.2.2004
Где: Германия г .Ганновер

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



To OlegsDP
Цитата

typeid - это не функция, а всего-навсего директива компилятора

Это ясно, но мне хватит и этого.
Главное, что понятно, где копать smile.gif
Спасибо за заметку.





--------------------
PM WWW IM ICQ Skype GTalk Jabber AOL YIM MSN   Вверх
FreshMeat
Дата 18.3.2004, 19:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Цитата
Это потому, что typeid - это не функция, а всего-навсего директива компилятора, такая же как sizeof.

Что такое директива компилятора?
typeid и sizeof - это ключевые слова. см. 2.11/1

PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С++:Общие вопросы"
Earnest Daevaorn

Добро пожаловать!

  • Черновик стандарта C++ (за октябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика(4.4мб).
  • Черновик стандарта C (за сентябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика (3.4мб).
  • Прежде чем задать вопрос, прочтите это и/или это!
  • Здесь хранится весь мировой запас ссылок на документы, связанные с C++ :)
  • Не брезгуйте пользоваться тегами [code=cpp][/code].
  • Пожалуйста, не просите написать за вас программы в этом разделе - для этого существует "Центр Помощи".
  • C++ FAQ

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

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


 




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


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

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