Форум программистов, компьютерный форум, киберфорум
Наши страницы
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
 
Рейтинг 4.78/9: Рейтинг темы: голосов - 9, средняя оценка - 4.78
tokar_1
1 / 1 / 0
Регистрация: 11.04.2012
Сообщений: 36
#1

Имя экземпляра объекта внутри класса на С++

31.08.2013, 19:45. Просмотров 1657. Ответов 26
Метки нет (Все метки)

Добрый день.

Подскажите, пожалуйста, как узнать имя экземпляра объекта внутри класса на С++ ?
В частности, мне надо имя экземпляра объекта печатать на экран.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
31.08.2013, 19:45
Ответы с готовыми решениями:

Видимость экземпляра класса внутри класса
Здравствуйте! Пытаюсь вывести openCV видео в QT виджете. На данный момент в...

Как узнать имя экземпляра класса?
у меня есть класс polynom, я создаю его экземпляры polynom a(5), b(5), c(5);...

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

При создании экземпляра класса, создается 2 экземпляра вместо 1
Подсчет экземпляров ведется с помощью статического члена num_dogs, который во...

Сложение экземпляра базового класса и экземпляра наследника
Добрый вечер! Моя задача - сложить экземпляр базового класса и наследника....

26
coloc
погромист
411 / 247 / 30
Регистрация: 27.08.2012
Сообщений: 550
Завершенные тесты: 1
31.08.2013, 19:52 #2
C++
1
2
3
4
5
6
7
8
#include <iostream>
 
#define print( i ) std::cout << #i;
 
int main() {
    print( std::cout );
    return 0;
}
Так?
1
Бендерродригез
Сгибальщик
42 / 42 / 4
Регистрация: 18.05.2013
Сообщений: 220
Завершенные тесты: 1
31.08.2013, 19:54 #3
C++
1
2
3
4
5
6
7
class imennoj{
    string name;
public:
    imennoj(string str){
        name = str;
    };
}
Что значит имя экземпляра?
0
Kuzia domovenok
2261 / 2030 / 459
Регистрация: 25.03.2012
Сообщений: 7,173
Записей в блоге: 1
31.08.2013, 21:03 #4
а зачем тебе это понадобилось? Не припоминаю, какая может быть реальная необходимость писать имена переменных. И да, это невозможно. После компиляции все имена переменных, грубо говоря, превращаются в адреса.
0
ValeryS
Модератор
7215 / 5478 / 682
Регистрация: 14.02.2011
Сообщений: 18,530
31.08.2013, 21:11 #5
Цитата Сообщение от tokar_1 Посмотреть сообщение
Подскажите, пожалуйста, как узнать имя экземпляра объекта внутри класса на С++ ?
ну если ты будешь их хранить внутри класса
и вызывать как нибудь так
C++
1
2
3
4
5
6
7
class A
{
.........
string name;
A(string nm){name=nm;};
}
A B("B");
но это извращение
а зачем это надо?
0
tokar_1
1 / 1 / 0
Регистрация: 11.04.2012
Сообщений: 36
31.08.2013, 21:15  [ТС] #6
coloc, не так
Бендерродригез, не так

Поясняю
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
#include <iostream>
using namespace std;
 
class T {
private:
...................
public: 
..................
   void display(){
     cout<<   ;   //здесь нужно вывести имя экземпляра объекта, т.е. а 
   }    
}
int main(){
   T a ;
 
return 0 ;
}
Добавлено через 3 минуты
ValeryS, так я уже догадался. Но ты прав, это извращение не пойдет.
0
ValeryS
Модератор
7215 / 5478 / 682
Регистрация: 14.02.2011
Сообщений: 18,530
31.08.2013, 21:16 #7
Цитата Сообщение от tokar_1 Посмотреть сообщение
Поясняю
ты вообще представляешь что такое класс /структура экземпляр/объект

в описании класса равно и структуре находятся некоторые элементы
при создании объекта выделяется память необходимая для размещения всех этих объектов
потом в дело вступает конструктор
ни о каких именах в это время программа уже не знает
они потерялись еще на этапе компиляции
0
tokar_1
1 / 1 / 0
Регистрация: 11.04.2012
Сообщений: 36
31.08.2013, 21:17  [ТС] #8
Kuzia domovenok, вот именно у меня есть необходимость выводить имена объектов на экран
0
0x10
2571 / 1751 / 288
Регистрация: 24.11.2012
Сообщений: 4,377
31.08.2013, 21:21 #9
Цитата Сообщение от tokar_1 Посмотреть сообщение
вот именно у меня есть необходимость выводить имена объектов на экран
Странная потребность. Серьезно: зачем? Я бы даже спросил: нафига?

Как объединение того, что уже предлагали выше:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
#include <iostream>
 
#define VAR(x) x(#x)
 
struct MyStruct
{
    MyStruct(const std::string& name)
    {
        std::cout << name << std::endl;
    }
};
 
int main()
{
    MyStruct VAR(a), VAR(b), VAR(c);
}
0
tokar_1
1 / 1 / 0
Регистрация: 11.04.2012
Сообщений: 36
31.08.2013, 21:23  [ТС] #10
ValeryS, сорри я исправил, не в кострукторе надо выводить, а в методе класса
0
ValeryS
Модератор
7215 / 5478 / 682
Регистрация: 14.02.2011
Сообщений: 18,530
31.08.2013, 21:28 #11
Цитата Сообщение от tokar_1 Посмотреть сообщение
ValeryS, сорри я исправил, не в кострукторе надо выводить, а в методе класса
а никакой разницы имени уже нет
вот тебе предложил 0x10 через макрос
могу предложить другой путь
никаких внятных имен ты не увидишь но можешь увидеть адрес объекта и от него танцевать
C++
1
2
3
4
fnc()
{
std::cout << "Addr jdject"<<this << std::endl;
}
1
tokar_1
1 / 1 / 0
Регистрация: 11.04.2012
Сообщений: 36
31.08.2013, 21:34  [ТС] #12
0x10, если через макрос делать, то как методы класса применять к данному объекту?

Добавлено через 2 минуты
Может как-нибудь возможно через *this в классе или через <typeinfo.h>
0
0x10
2571 / 1751 / 288
Регистрация: 24.11.2012
Сообщений: 4,377
31.08.2013, 21:35 #13
tokar_1, эм?
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
#include <iostream>
 
#define VAR(x) x(#x)
 
struct MyStruct
{
    MyStruct(const std::string& name):
        name_{name}
    { }
    
    void f()
    {
        std::cout << name_ << std::endl;
    }
    
    std::string name_;
};
 
int main()
{
    MyStruct VAR(a), VAR(b), VAR(c);
    a.f();
    b.f();
    c.f();
}
Добавлено через 23 секунды
Вопрос "на кой черт" все еще актуален.
1
tokar_1
1 / 1 / 0
Регистрация: 11.04.2012
Сообщений: 36
31.08.2013, 21:42  [ТС] #14
0x10,
Цитата Сообщение от 0x10 Посмотреть сообщение
Вопрос "на кой черт" все еще актуален.
необходимо выводить имена объектов на экран

Добавлено через 3 минуты
Цитата Сообщение от 0x10 Посмотреть сообщение
tokar_1, эм?
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
#include <iostream>
 
#define VAR(x) x(#x)
 
struct MyStruct
{
    MyStruct(const std::string& name):
        name_{name}
    { }
    
    void f()
    {
        std::cout << name_ << std::endl;
    }
    
    std::string name_;
};
 
int main()
{
    MyStruct VAR(a), VAR(b), VAR(c);
    a.f();
    b.f();
    c.f();
}
Добавлено через 23 секунды
Так впринципе меня устраивает , спасибо большое
0
Убежденный
Ушел с форума
Эксперт С++
15954 / 7266 / 1178
Регистрация: 02.05.2013
Сообщений: 11,637
Записей в блоге: 1
Завершенные тесты: 1
31.08.2013, 21:42 #15
C++
1
2
3
4
5
6
7
size_t const Size = 100;
int Array[Size];
 
for (int i = 0; i < Size; ++i)
{
    Array[i] = i;
}
Слабо вывести имена int-ов из массива Array ?
0
tokar_1
1 / 1 / 0
Регистрация: 11.04.2012
Сообщений: 36
31.08.2013, 21:43  [ТС] #16
Все же если кто знает как реализовать через *this в классе или через <typeinfo.h>, то пишите
0
ValeryS
Модератор
7215 / 5478 / 682
Регистрация: 14.02.2011
Сообщений: 18,530
31.08.2013, 21:57 #17
Цитата Сообщение от tokar_1 Посмотреть сообщение
Все же если кто знает как реализовать через *this в классе
никак
this это адрес в памяти где лежит твой объект
никаких имен в памяти нет
откомпилируй любую программу и посмотри дизасемблером, имен не увидишь
и ты так и не ответил зачем выводить на экран?
отладочная информация?
лабораторная работа?
на кой черт пользователю видеть имена переменных?
это примерно тоже самое как вывести имена регистров в которые записываются значения
может твоя задача решается по другому объясни зачем выводить на экран?
0
Kastaneda
Jesus loves me
Эксперт С++
4823 / 2997 / 345
Регистрация: 12.12.2009
Сообщений: 7,559
Записей в блоге: 2
Завершенные тесты: 1
31.08.2013, 22:54 #18
Цитата Сообщение от tokar_1 Посмотреть сообщение
Все же если кто знает как реализовать через *this в классе или через <typeinfo.h>, то пишите
Можно узнать имя класса, но не имя объекта.
0
Герц
525 / 342 / 12
Регистрация: 05.11.2010
Сообщений: 1,077
Записей в блоге: 1
31.08.2013, 23:10 #19
После компиляции никаких "имен объектов" уже нет, даже в языками с интроспекцией типа C# и Java имена не имеют значения и узнать их на этапе исполнения нельзя.
0
tokar_1
1 / 1 / 0
Регистрация: 11.04.2012
Сообщений: 36
01.09.2013, 02:02  [ТС] #20
Цитата Сообщение от ValeryS Посмотреть сообщение
и ты так и не ответил зачем выводить на экран?
отладочная информация?
лабораторная работа?
на кой черт пользователю видеть имена переменных?
Хотел в программе выводить имена объектов, к объекту привязаны различные методы, их значения тоже отображаю на экране. Не хотелось бы руками вбивать через cout<<" имя_объекта ".
Само отображения имен объектов - это у меня просто информация.
0
01.09.2013, 02:02
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
01.09.2013, 02:02

Удаление экземпляра класса в функции самого класса (Ошибка при отладке)
Допустим, у нас есть класс Buffer, который хранит в себе указатель на класс...

Явное создание экземпляра класса и явная специализация шаблона класса
Всем добрый день! Не могу разобраться - эти две технологии дают один и тот же...

Передача свойства одного экземпляра класса другому экземпляру класса
#include &lt;tchar.h&gt; class A { public: A(); int aVar; }; class B :...


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

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

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