Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > C/C++: Общие вопросы > Где хранится описание типа (класса)?


Автор: GSasha 12.9.2008, 15:55
Приветствую, товарищи программисты!
Как программа узнает тип обьекта при динамическом создании! Где храниться сам класс (или структура) после компиляции!?
Не обьект класса, а сам класс! Насчет методов, то понятно что все проходит через this. Но остальное же описание класса где-то же должно находится!?
Спасибо!

Автор: Mayk 12.9.2008, 16:00
Цитата(GSasha @  12.9.2008,  19:55 Найти цитируемый пост)

Как программа узнает тип обьекта при динамическом создании

нет в c++ никакого динамического создания. в момент создания тип класса всегда известен. hint: если делаем new HelloWorld(), то тип класса - HelloWorld. 
Цитата(GSasha @  12.9.2008,  19:55 Найти цитируемый пост)
Где храниться сам класс (или структура) после компиляции!?
Не обьект класса, а сам класс

rtti в c++ хоть и есть, но он в многих компиляторах опционален. так что возможно что и нигде. 
Да и сам rtti в с++ такой, что можно считать что его и нет  smile 

Цитата(GSasha @  12.9.2008,  19:55 Найти цитируемый пост)
Но остальное же описание класса где-то же должно находится!?

Нет. Зачем?

Добавлено через 1 минуту
а ещё лучше возьми включи генерацию ассемблерного листинга, и изучай. 

Автор: Любитель 12.9.2008, 16:13
Цитата(GSasha @  12.9.2008,  15:55 Найти цитируемый пост)
Но остальное же описание класса где-то же должно находится

Если речь про поля - их "описание" не храниться. А данные - это ж и есть объект smile

Автор: GSasha 12.9.2008, 16:17
Хорошо. Значит я чего то недопонял!
Тогда раскажите мне плиз процес создания обьекта динамически! Есть напр
 
Код

class HelloWorld
{
    public:
    int a;
    int b;

    GetAB(){return a + b;}
};
.......
    HelloWorld *p = new HelloWorld();
        p->a = 150;
.......


в екзешнике где-то есть описание типа HelloWorld или как указатель будет уметь правильно общаться с обьектом?

Автор: Daevaorn 12.9.2008, 16:32
Цитата(GSasha @  12.9.2008,  17:17 Найти цитируемый пост)
в екзешнике где-то есть описание типа HelloWorld или как указатель будет уметь правильно общаться с обьектом?

Описание доступно компилятору в момент компиляции, а этого достаточно. Он генерирует правильные инструкции для работы с данным классом.

Автор: GSasha 12.9.2008, 16:36
Ну наверное все понятно! Спасибо всем за обьяснение!

Автор: Любитель 12.9.2008, 18:21
Цитата(GSasha @  12.9.2008,  16:17 Найти цитируемый пост)
в екзешнике где-то есть описание типа HelloWorld или как указатель будет уметь правильно общаться с обьектом?

Если речь про виртуальные функции - то реально хранится таблица виртуальных методов, а в объекте спецполе - указатель на нужную таблицу.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)