Каким образом создаётся экземпляр класса? с++
У нас есть простой класс Point:
class Point
{
public:
float x, y;
void Set(float x, float y)
{
this->x = x;
this->y = y;
}
}
Метод Set, насколько я знаю обычная функция,у которой первый параметр, указатель на объект. А что будет с полями y и x, они будут записаны в какую-либо таблицу или что-то другое? Где хранится описание этого класса, то есть оно хранится в оперативной памяти вместе с запуском exe-файла или оно будет действительно только на этапе компиляции. Я вас умоляю помогите мне с этим разобраться, заранее огромное спасибо:)
Ответы (1 шт):
Если вы определили переменные
Point p1, p2, p3;
то в оперативной памяти резервируется область под хранение всех полей этого класса: x, y. В зависимости от места определения переменной, это может быть в статической памяти, которая выделяется при старте программы (если определили переменную в глобальной области), или в стеке, стековая память выделяется при входе в тело функции (если вы определили эти переменные в теле функции. Память под них выделяется столько раз, сколько переменных вы объявили.
Если вы определили указатель на Point, и создали объект с помощью оператора new, всё происходит точно так же: резервируется память под две переменные, только память выделяется из кучи и происходит это в момент вызова оператора new.
Далее, независимо от способа выделения памяти, вызывается конструктор класса. Хотя он у вас и не определён, но конструктор по умолчанию всегда генерируется компилятором.
Если вы объявили эти переменные в глобальной области (в статической памяти), то они автоматически будут инициализированы нулями. Если в теле функции (в стеке) или с помощью оператора new, то они будут заполнены мусором, и их необходимо инициализировать вручную (это можно сделать в конструкторе).
Методы класса компилируются один раз, и присутствуют в коде в единственном экземпляре. Но к методу, в соответствии с соглашением о вызовах thiscall, прибавляется неявный параметр - указатель на объект, к которому применяется данный метод.