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

Вывести на экран имя класса - C++

Восстановить пароль Регистрация
 
Рейтинг: Рейтинг темы: голосов - 33, средняя оценка - 4.91
bobromet
24 / 24 / 1
Регистрация: 06.03.2010
Сообщений: 59
29.08.2010, 16:48     Вывести на экран имя класса #1
Можно как нибуть форматнуть в string имя класса?

C++
1
2
3
4
5
6
7
8
class HelloWorld
{   
public:
    string s;
void view(){
        cout << s << endl;
 
};
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
29.08.2010, 16:48     Вывести на экран имя класса
Посмотрите здесь:

C++ при перезагрузке оператора для класса не получается использовать имя переменной такое же,как в описании класса
C++ Вывести на экран имя и фамилию 10 раз
C++ Составить программу, которая вводит с клавиатуры имя и год рождения лица и выводит на экран "Привет Имя, тебе Р лет:).
C++ как вывести имя программы? именно имя, то что видно в провонике example.exe
C++ c++ Имеется перечень файлов, каждый из которых задан своими атрибутами: имя, размер в байтах, скрытый, только для чтения, архивный. Вывести на экран в
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
HIMen
 Аватар для HIMen
4105 / 1354 / 39
Регистрация: 12.04.2009
Сообщений: 2,346
29.08.2010, 16:49     Вывести на экран имя класса #2
Сообщение было отмечено автором темы, экспертом или модератором как ответ
C++
1
2
3
4
5
6
7
8
class HelloWorld
{       
public:
        string s;
void view(){
        cout << "HelloWorld" << endl;
 
};
bobromet
24 / 24 / 1
Регистрация: 06.03.2010
Сообщений: 59
29.08.2010, 17:00  [ТС]     Вывести на экран имя класса #3
HIMen, прикольно. Допустим имя класса неизвестно.
ForEveR
Модератор
Эксперт C++
 Аватар для ForEveR
7927 / 4709 / 318
Регистрация: 24.06.2010
Сообщений: 10,524
Завершенные тесты: 3
29.08.2010, 17:01     Вывести на экран имя класса #4
bobromet, А зачем это может понадобиться? Есть такая вещь как typeid(Ob).name(); Но выведет не все имя, а сокращенный тип для этого класса.
Для использования надо подключить: #include <typeinfo>
Ob - объект класса.
CyBOSSeR
Эксперт C++
 Аватар для CyBOSSeR
2294 / 1664 / 86
Регистрация: 06.03.2009
Сообщений: 3,675
29.08.2010, 17:06     Вывести на экран имя класса #5
Сообщение было отмечено автором темы, экспертом или модератором как ответ
bobromet,
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
#include <iostream>
#include <typeinfo>
#include <string>
 
template<class T>
class Named {
public:
  std::string getName() {
    return typeid(T).name();
  }
};
 
class Foo : public Named<Foo> { };
 
int main() {
  std::cout << Foo().getName() << std::endl;
  return 0;
}
nikkka
Мат в 32 хода
 Аватар для nikkka
235 / 170 / 8
Регистрация: 10.09.2009
Сообщений: 1,096
29.08.2010, 17:07     Вывести на экран имя класса #6
Допустим имя класса неизвестно.
пишешь программу и не знаешь имье класса?

Добавлено через 59 секунд
Цитата Сообщение от CyBOSSeR Посмотреть сообщение
#include <typeinfo>
а вот про это не знал...
ForEveR
Модератор
Эксперт C++
 Аватар для ForEveR
7927 / 4709 / 318
Регистрация: 24.06.2010
Сообщений: 10,524
Завершенные тесты: 3
29.08.2010, 17:14     Вывести на экран имя класса #7
nikkka, Почитай про RTTI. Определение типа во время выполнения(Информация о типе на этапе выполнения).

CyBOSSeR, а есть разница в наличии метода для класса? Или это идентично вашему коду?

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
#include <iostream>
#include <typeinfo>
#include <string>
 
template<class T>
class Named { };
 
class Base : public Named<Base> { };
 
int main() {
  Base b;
  std::cout << typeid(b).name() << std::endl;
  return 0;
}
Или даже так:

C++
1
2
3
4
5
6
7
8
9
10
11
#include <iostream>
#include <typeinfo>
#include <string>
 
class Base { };
 
int main() {
  Base b;
  std::cout << typeid(b).name() << std::endl;
  return 0;
}
HIMen
 Аватар для HIMen
4105 / 1354 / 39
Регистрация: 12.04.2009
Сообщений: 2,346
29.08.2010, 17:18     Вывести на экран имя класса #8
Цитата Сообщение от bobromet Посмотреть сообщение
HIMen, прикольно. Допустим имя класса неизвестно.
Не понимаю, зачем это нужно. Или с++ позволяет подгружать код во время выполнения?
fasked
Эксперт C++
 Аватар для fasked
4925 / 2505 / 180
Регистрация: 07.10.2009
Сообщений: 4,306
Записей в блоге: 1
29.08.2010, 17:27     Вывести на экран имя класса #9
CyBOSSeR,
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
#include <iostream>
#include <typeinfo>
#include <string>
 
class Class
{
public:
   std::string getName() {
      return typeid(*this).name();
   }
};
 
int main() {
  std::cout << Class().getName() << std::endl;
  return 0;
}
ForEveR
Модератор
Эксперт C++
 Аватар для ForEveR
7927 / 4709 / 318
Регистрация: 24.06.2010
Сообщений: 10,524
Завершенные тесты: 3
29.08.2010, 17:29     Вывести на экран имя класса #10
fasked,
Поиграем кто короче?)
C++
1
2
3
4
5
6
7
8
9
#include <iostream>
#include <typeinfo>
 
class Base { };
 
int main() {
  std::cout << typeid(Base).name() << std::endl;
  return 0;
}
bobromet
24 / 24 / 1
Регистрация: 06.03.2010
Сообщений: 59
29.08.2010, 17:36  [ТС]     Вывести на экран имя класса #11
Парни, отлично! Жму 5
Помню что в шарпе так делал, иногда когда куча классов с "говорящими" именами проще вывести имя класса чем каждый раз новую строчку писать .)
CyBOSSeR
Эксперт C++
 Аватар для CyBOSSeR
2294 / 1664 / 86
Регистрация: 06.03.2009
Сообщений: 3,675
29.08.2010, 17:46     Вывести на экран имя класса #12
fasked, попробуй пронаследоватся от Class и вызови метод getName.
Хотя если метод сделать виртуальным все будет ок.

Но если метод мы сделаем виртуальным, у подклассов появится возможность его переопределить, это не есть хорошо, тем более, что реализация данного методв должна быть одинакова во всех подклассах. Кроме того, делая метод виртуальным, мы получаем еще и указатель на таблицу виртуальных функций в каждом объекте.
Nameless One
Эксперт С++
 Аватар для Nameless One
5755 / 3404 / 255
Регистрация: 08.02.2010
Сообщений: 7,393
29.08.2010, 18:49     Вывести на экран имя класса #13
bobromet, можно сделать кривой "костыль" с помощью препроцессора:
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
29
30
31
32
33
#include <iostream>
#include <cstdlib>
 
#define methodName(className, method) className ## method
 
#define defClass(className) \
class className \
{ \
public: \
    static void methodName(className, _getName)() \
    { \
        std::cout << #className << std::endl; \
    } \
private :
 
#define endClass };
 
defClass(foo)
endClass
 
defClass(bar)
endClass
 
defClass(fooBar)
endClass
 
int main()
{
    foo::foo_getName();
    bar::bar_getName();
    fooBar::fooBar_getName();
    return EXIT_SUCCESS;
}
C помощью макросов генерируется строка (имя класса) и имя метода, который будет возвращать эту строку. Только вот я даже и не знаю, кому такое чудо может понадобиться...
M128K145
Эксперт C++
 Аватар для M128K145
8272 / 3491 / 142
Регистрация: 03.07.2009
Сообщений: 10,707
29.08.2010, 19:07     Вывести на экран имя класса #14
На сколько я понял, то требуется аналог рефлексии из Java
Nameless One
Эксперт С++
 Аватар для Nameless One
5755 / 3404 / 255
Регистрация: 08.02.2010
Сообщений: 7,393
29.08.2010, 19:08     Вывести на экран имя класса #15
Цитата Сообщение от M128K145 Посмотреть сообщение
На сколько я понял, то требуется аналог рефлексии из Java
Не знаком с Java. Если не трудно, можно объяснить, что это такое?
M128K145
Эксперт C++
 Аватар для M128K145
8272 / 3491 / 142
Регистрация: 03.07.2009
Сообщений: 10,707
29.08.2010, 19:26     Вывести на экран имя класса #16
Nameless One, рефлексия позволяет получить всю информацию о классе, зная только его имя, можно изменять этот класс, копировать его, сериализовать.
http://ru.wikipedia.org/wiki/%D0%9E%...D%D0%B8%D0%B5)
System16v
 Аватар для System16v
3 / 3 / 0
Регистрация: 19.02.2014
Сообщений: 115
02.06.2015, 11:52     Вывести на экран имя класса #17
Ребят ну подскажите,как же все таки можно вывести имя объекта класса? Суть в том,что написал лабораторную, в самой лабе есть задание,чтоб на экран выводилось сообщение конструктора и деструктора,и показывало к кому объекту они применяются. Так то я конечно написал, все выводится,но вместо имени я так понимаю что выводится просто адрес объекта,а не его имя.Использовал просто указатель this при выводе. Попытался сделать как выше тут описано через библиотеку typeinfo,все равно не то,выводится не имя объекта,а имя класса . Так то преподаватель думаю ничего не скажет (ибо в самом задании написано,использовать указатель this), просто самому интересно,возможно ли все же как-то сделать,чтоб выводилось именно имя созданного объекта,а не его адрес,как работает через указатель this?
mymedia
190 / 190 / 48
Регистрация: 27.05.2011
Сообщений: 543
02.06.2015, 12:02     Вывести на экран имя класса #18
System16v, в С++ нету стандартных средств, которые позволяли бы вывести имя объекта или класса. Дело в том, что имена типов и объектов известны только компилятору. Когда программа уже выполняется, эту информацию получить сложно (не обращаясь к исходникам). Всё-таки С++ компилируется в машинный код, а в машинном коде такой информации нету — только сплошные адреса.

Добавлено через 1 минуту
Вы могли попытаться как-нибудь подключится из программы к исходному коду с помощью отладчика. Но только я не знаю как это сделать
System16v
 Аватар для System16v
3 / 3 / 0
Регистрация: 19.02.2014
Сообщений: 115
02.06.2015, 12:12     Вывести на экран имя класса #19
mymedia, ну имя класса то на экран вывести можно как тут выше написано через typeid(*this).name , ток для чего его выводить,если имя класса неизменно и постоянно одинаковое , а меняются только созданные объекты класса,собственно имена которых и хотелось бы видеть . Можно конечно просто в конструктор запихнуть вызов функции,которая просто бы выдавала содержимое объекта,но в лабе 4-5 объектов,и для каждого несколько раз вызываются кострукторы\деструкторы,и если на каждое сообщение кон-ра\дес-ра выдавать содержимое объекта,в глазах зарябит,и не очень удобно смотреть. Эх,придется значит на адреса объектов только и смотреть. На счет отладчика,я об этом тоже ничего не знаю,т.к. начал недавно C++ изучать
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
02.06.2015, 12:12     Вывести на экран имя класса
Еще ссылки по теме:

C++ Вывести на экран из класса
C++ Шаблон класса должен давать возможность вывести все элементы множества на экран, сложение, вычитание, осуществлять пересечение множеств
C++ Как, создав переменную класса string, вывести ее последнюю букву на экран

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

Или воспользуйтесь поиском по форуму:
castaway
Эксперт С++
4848 / 2987 / 368
Регистрация: 10.11.2010
Сообщений: 11,028
Записей в блоге: 10
Завершенные тесты: 1
02.06.2015, 12:12     Вывести на экран имя класса #20
В GCC можно получить полное имя метода, в которое входит имя класса. Его можно "обрезать" и получить имя класса.
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
#include <iostream>
 
class MyClass {
public:
    void foo() { std::cout << __PRETTY_FUNCTION__ << std::endl; }
};
 
int main()
{
    MyClass c;
    c.foo();
    return 0;
}
Yandex
Объявления
02.06.2015, 12:12     Вывести на экран имя класса
Ответ Создать тему
Опции темы

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