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

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
 
Рейтинг: Рейтинг темы: голосов - 33, средняя оценка - 4.91
bobromet
24 / 24 / 1
Регистрация: 06.03.2010
Сообщений: 59
#1

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

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

Можно как нибуть форматнуть в string имя класса?

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

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

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

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

Как, создав переменную класса string, вывести ее последнюю букву на экран - C++
Если нужно обратиться к определенному символу слова, то можно использовать это: string s = &quot;string&quot;; char ch = s;//contains 's'Но в...

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

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

19
HIMen
4143 / 1392 / 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;
 
};
3
bobromet
24 / 24 / 1
Регистрация: 06.03.2010
Сообщений: 59
29.08.2010, 17:00  [ТС] #3
HIMen, прикольно. Допустим имя класса неизвестно.
0
ForEveR
В астрале
Эксперт С++
7979 / 4738 / 321
Регистрация: 24.06.2010
Сообщений: 10,543
Завершенные тесты: 3
29.08.2010, 17:01 #4
bobromet, А зачем это может понадобиться? Есть такая вещь как typeid(Ob).name(); Но выведет не все имя, а сокращенный тип для этого класса.
Для использования надо подключить: #include <typeinfo>
Ob - объект класса.
0
CyBOSSeR
Эксперт С++
2303 / 1673 / 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;
}
3
nikkka
Мат в 32 хода
235 / 170 / 8
Регистрация: 10.09.2009
Сообщений: 1,096
29.08.2010, 17:07 #6
Допустим имя класса неизвестно.
пишешь программу и не знаешь имье класса?

Добавлено через 59 секунд
Цитата Сообщение от CyBOSSeR Посмотреть сообщение
#include <typeinfo>
а вот про это не знал...
0
ForEveR
В астрале
Эксперт С++
7979 / 4738 / 321
Регистрация: 24.06.2010
Сообщений: 10,543
Завершенные тесты: 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;
}
1
HIMen
4143 / 1392 / 39
Регистрация: 12.04.2009
Сообщений: 2,346
29.08.2010, 17:18 #8
Цитата Сообщение от bobromet Посмотреть сообщение
HIMen, прикольно. Допустим имя класса неизвестно.
Не понимаю, зачем это нужно. Или с++ позволяет подгружать код во время выполнения?
0
fasked
Эксперт С++
4945 / 2525 / 180
Регистрация: 07.10.2009
Сообщений: 4,311
Записей в блоге: 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
ForEveR
В астрале
Эксперт С++
7979 / 4738 / 321
Регистрация: 24.06.2010
Сообщений: 10,543
Завершенные тесты: 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;
}
1
bobromet
24 / 24 / 1
Регистрация: 06.03.2010
Сообщений: 59
29.08.2010, 17:36  [ТС] #11
Парни, отлично! Жму 5
Помню что в шарпе так делал, иногда когда куча классов с "говорящими" именами проще вывести имя класса чем каждый раз новую строчку писать .)
0
CyBOSSeR
Эксперт С++
2303 / 1673 / 86
Регистрация: 06.03.2009
Сообщений: 3,675
29.08.2010, 17:46 #12
fasked, попробуй пронаследоватся от Class и вызови метод getName.
Хотя если метод сделать виртуальным все будет ок.

Но если метод мы сделаем виртуальным, у подклассов появится возможность его переопределить, это не есть хорошо, тем более, что реализация данного методв должна быть одинакова во всех подклассах. Кроме того, делая метод виртуальным, мы получаем еще и указатель на таблицу виртуальных функций в каждом объекте.
0
Nameless One
Эксперт С++
5775 / 3425 / 255
Регистрация: 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
M128K145
Эксперт С++
8293 / 3513 / 143
Регистрация: 03.07.2009
Сообщений: 10,706
29.08.2010, 19:07 #14
На сколько я понял, то требуется аналог рефлексии из Java
0
Nameless One
Эксперт С++
5775 / 3425 / 255
Регистрация: 08.02.2010
Сообщений: 7,448
29.08.2010, 19:08 #15
Цитата Сообщение от M128K145 Посмотреть сообщение
На сколько я понял, то требуется аналог рефлексии из Java
Не знаком с Java. Если не трудно, можно объяснить, что это такое?
0
29.08.2010, 19:08
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
29.08.2010, 19:08
Привет! Вот еще темы с ответами:

как вывести имя программы? именно имя, то что видно в провонике example.exe - C++
собственно вопрос ^. это возможно? Добавлено через 18 минут догадался, кому надо ^^ #include &lt;iostream.h&gt; using std::cout; ...

Шаблон класса должен давать возможность вывести все элементы множества на экран, сложение, вычитание, осуществлять пересечение множеств - C++
Есть вот такое задание: 4. Создать шаблон класса Mnogyna. Шаблон класса должен давать возможность вывести все элементы множества на...

Как правильно использовать классы? Как вывести значение класса на экран? - C++
Всех приветствую. Делаю задание по книге. По заданию нужно завести класс, в котором хранится информация о книгах: число выданных на руки...

Как объявить массив на 5 элементов, вывести на экран, проинициализировать его и снова вывести на экран? - C++
как объявить массив на 5 элементов, вывести на экран, проинициализировать его и снова вывести на экран?


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

Или воспользуйтесь поиском по форуму:
15
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru