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

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

31.08.2013, 19:45. Просмотров 1734. Ответов 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
погромист
412 / 248 / 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
2443 / 2151 / 525
Регистрация: 25.03.2012
Сообщений: 7,749
Записей в блоге: 1
31.08.2013, 21:03 4
а зачем тебе это понадобилось? Не припоминаю, какая может быть реальная необходимость писать имена переменных. И да, это невозможно. После компиляции все имена переменных, грубо говоря, превращаются в адреса.
0
ValeryS
Модератор
7372 / 5573 / 707
Регистрация: 14.02.2011
Сообщений: 18,936
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
Модератор
7372 / 5573 / 707
Регистрация: 14.02.2011
Сообщений: 18,936
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
2579 / 1758 / 289
Регистрация: 24.11.2012
Сообщений: 4,391
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
Модератор
7372 / 5573 / 707
Регистрация: 14.02.2011
Сообщений: 18,936
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
2579 / 1758 / 289
Регистрация: 24.11.2012
Сообщений: 4,391
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
Убежденный
Ушел с форума
Эксперт С++
16128 / 7275 / 1181
Регистрация: 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
Модератор
7372 / 5573 / 707
Регистрация: 14.02.2011
Сообщений: 18,936
31.08.2013, 21:57 17
Цитата Сообщение от tokar_1 Посмотреть сообщение
Все же если кто знает как реализовать через *this в классе
никак
this это адрес в памяти где лежит твой объект
никаких имен в памяти нет
откомпилируй любую программу и посмотри дизасемблером, имен не увидишь
и ты так и не ответил зачем выводить на экран?
отладочная информация?
лабораторная работа?
на кой черт пользователю видеть имена переменных?
это примерно тоже самое как вывести имена регистров в которые записываются значения
может твоя задача решается по другому объясни зачем выводить на экран?
0
Kastaneda
Jesus loves me
Эксперт С++
4945 / 3022 / 346
Регистрация: 12.12.2009
Сообщений: 7,624
Записей в блоге: 2
Завершенные тесты: 1
31.08.2013, 22:54 18
Цитата Сообщение от tokar_1 Посмотреть сообщение
Все же если кто знает как реализовать через *this в классе или через <typeinfo.h>, то пишите
Можно узнать имя класса, но не имя объекта.
0
Герц
526 / 343 / 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