Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.52/107: Рейтинг темы: голосов - 107, средняя оценка - 4.52
25 / 25 / 3
Регистрация: 06.03.2010
Сообщений: 59
1

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

29.08.2010, 16:48. Показов 21904. Ответов 19
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Можно как нибуть форматнуть в string имя класса?

C++
1
2
3
4
5
6
7
8
class HelloWorld
{   
public:
    string s;
void view(){
        cout << s << endl;
 
};
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
29.08.2010, 16:48
Ответы с готовыми решениями:

Вывести на экран имя и фамилию 10 раз
здравствуйте, дорогие программисты!помогите пожалуйста решить задачу...вот условие: Написать...

Инициализация шаблонного класса(В конструкторе класса после двоеточия вновь имя класса)
Всем доброго времени суток! Пытаюсь разобраться как работает приведенный мной код. Конкретно,...

Вывести на экран из класса
Вдвнный момент изучаю классы.Не могу понять как их заполнять и выводить...Вот пример того,что я...

Вывести на экран фамилию, имя и адрес учеников, у которых нет домашнего телефона
Известны данные о 25-ти учениках класса: фамилия, имя, отчество, адрес и домашний телефон, если он...

19
4337 / 1506 / 101
Регистрация: 12.04.2009
Сообщений: 2,342
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;
 
};
3
25 / 25 / 3
Регистрация: 06.03.2010
Сообщений: 59
29.08.2010, 17:00  [ТС] 3
HIMen, прикольно. Допустим имя класса неизвестно.
0
В астрале
Эксперт С++
8049 / 4806 / 655
Регистрация: 24.06.2010
Сообщений: 10,562
29.08.2010, 17:01 4
bobromet, А зачем это может понадобиться? Есть такая вещь как typeid(Ob).name(); Но выведет не все имя, а сокращенный тип для этого класса.
Для использования надо подключить: #include <typeinfo>
Ob - объект класса.
0
Эксперт С++
2347 / 1720 / 148
Регистрация: 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;
}
4
Мат в 32 хода
237 / 172 / 18
Регистрация: 10.09.2009
Сообщений: 1,096
29.08.2010, 17:07 6
Допустим имя класса неизвестно.
пишешь программу и не знаешь имье класса?

Добавлено через 59 секунд
Цитата Сообщение от CyBOSSeR Посмотреть сообщение
#include <typeinfo>
а вот про это не знал...
0
В астрале
Эксперт С++
8049 / 4806 / 655
Регистрация: 24.06.2010
Сообщений: 10,562
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;
}
1
4337 / 1506 / 101
Регистрация: 12.04.2009
Сообщений: 2,342
29.08.2010, 17:18 8
Цитата Сообщение от bobromet Посмотреть сообщение
HIMen, прикольно. Допустим имя класса неизвестно.
Не понимаю, зачем это нужно. Или с++ позволяет подгружать код во время выполнения?
0
Эксперт С++
5043 / 2622 / 241
Регистрация: 07.10.2009
Сообщений: 4,310
Записей в блоге: 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;
}
2
В астрале
Эксперт С++
8049 / 4806 / 655
Регистрация: 24.06.2010
Сообщений: 10,562
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;
}
1
25 / 25 / 3
Регистрация: 06.03.2010
Сообщений: 59
29.08.2010, 17:36  [ТС] 11
Парни, отлично! Жму 5
Помню что в шарпе так делал, иногда когда куча классов с "говорящими" именами проще вывести имя класса чем каждый раз новую строчку писать .)
0
Эксперт С++
2347 / 1720 / 148
Регистрация: 06.03.2009
Сообщений: 3,675
29.08.2010, 17:46 12
fasked, попробуй пронаследоватся от Class и вызови метод getName.
Хотя если метод сделать виртуальным все будет ок.

Но если метод мы сделаем виртуальным, у подклассов появится возможность его переопределить, это не есть хорошо, тем более, что реализация данного методв должна быть одинакова во всех подклассах. Кроме того, делая метод виртуальным, мы получаем еще и указатель на таблицу виртуальных функций в каждом объекте.
0
Эксперт С++
5828 / 3479 / 358
Регистрация: 08.02.2010
Сообщений: 7,448
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 помощью макросов генерируется строка (имя класса) и имя метода, который будет возвращать эту строку. Только вот я даже и не знаю, кому такое чудо может понадобиться...
1
Эксперт JavaЭксперт С++
8384 / 3616 / 419
Регистрация: 03.07.2009
Сообщений: 10,709
29.08.2010, 19:07 14
На сколько я понял, то требуется аналог рефлексии из Java
0
Эксперт С++
5828 / 3479 / 358
Регистрация: 08.02.2010
Сообщений: 7,448
29.08.2010, 19:08 15
Цитата Сообщение от M128K145 Посмотреть сообщение
На сколько я понял, то требуется аналог рефлексии из Java
Не знаком с Java. Если не трудно, можно объяснить, что это такое?
0
Эксперт JavaЭксперт С++
8384 / 3616 / 419
Регистрация: 03.07.2009
Сообщений: 10,709
29.08.2010, 19:26 16
Nameless One, рефлексия позволяет получить всю информацию о классе, зная только его имя, можно изменять этот класс, копировать его, сериализовать.
http://ru.wikipedia.org/wiki/%... %B8%D0%B5)
2
3 / 3 / 1
Регистрация: 19.02.2014
Сообщений: 115
02.06.2015, 11:52 17
Ребят ну подскажите,как же все таки можно вывести имя объекта класса? Суть в том,что написал лабораторную, в самой лабе есть задание,чтоб на экран выводилось сообщение конструктора и деструктора,и показывало к кому объекту они применяются. Так то я конечно написал, все выводится,но вместо имени я так понимаю что выводится просто адрес объекта,а не его имя.Использовал просто указатель this при выводе. Попытался сделать как выше тут описано через библиотеку typeinfo,все равно не то,выводится не имя объекта,а имя класса . Так то преподаватель думаю ничего не скажет (ибо в самом задании написано,использовать указатель this), просто самому интересно,возможно ли все же как-то сделать,чтоб выводилось именно имя созданного объекта,а не его адрес,как работает через указатель this?
0
196 / 197 / 120
Регистрация: 27.05.2011
Сообщений: 545
02.06.2015, 12:02 18
System16v, в С++ нету стандартных средств, которые позволяли бы вывести имя объекта или класса. Дело в том, что имена типов и объектов известны только компилятору. Когда программа уже выполняется, эту информацию получить сложно (не обращаясь к исходникам). Всё-таки С++ компилируется в машинный код, а в машинном коде такой информации нету — только сплошные адреса.

Добавлено через 1 минуту
Вы могли попытаться как-нибудь подключится из программы к исходному коду с помощью отладчика. Но только я не знаю как это сделать
1
3 / 3 / 1
Регистрация: 19.02.2014
Сообщений: 115
02.06.2015, 12:12 19
mymedia, ну имя класса то на экран вывести можно как тут выше написано через typeid(*this).name , ток для чего его выводить,если имя класса неизменно и постоянно одинаковое , а меняются только созданные объекты класса,собственно имена которых и хотелось бы видеть . Можно конечно просто в конструктор запихнуть вызов функции,которая просто бы выдавала содержимое объекта,но в лабе 4-5 объектов,и для каждого несколько раз вызываются кострукторы\деструкторы,и если на каждое сообщение кон-ра\дес-ра выдавать содержимое объекта,в глазах зарябит,и не очень удобно смотреть. Эх,придется значит на адреса объектов только и смотреть. На счет отладчика,я об этом тоже ничего не знаю,т.к. начал недавно C++ изучать
0
Эксперт С++
4985 / 3092 / 456
Регистрация: 10.11.2010
Сообщений: 11,169
Записей в блоге: 10
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;
}
0
02.06.2015, 12:12
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
02.06.2015, 12:12
Помогаю со студенческими работами здесь

Вывести на экран элементы очереди пользовательского класса
#include &quot;SportAchievent.h&quot; #include &quot;Competitor.h&quot; #include &lt;queue&gt; using namespace std;...

Как, создав переменную класса string, вывести ее последнюю букву на экран
Если нужно обратиться к определенному символу слова, то можно использовать это: string s =...

При перегрузке оператора для класса не получается использовать имя переменной такое же, как в описании класса
Описал первый класс,затем - описал второй класс, используя первый,и когда начал перезагружать...

Составить программу, которая вводит с клавиатуры имя и год рождения лица и выводит на экран "Привет Имя, тебе Р лет:).
Буду благодарен. =(( 1. Составить программу, которая вводит с клавиатуры имя и год рождения лица и...


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

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