в ООП какова реальная внутренняя полезная нагрузка методов классов

#oop #methods

#ооп #методы

Вопрос:

Я программирую уже несколько лет, и у меня есть вопрос, касающийся внутреннего функционирования методов, когда мы создаем объект.

Итак, когда мы создаем объекты в POO, каждый объект получает свои собственные атрибуты. но на самом деле все они используют одни и те же методы, так как же это работает внутренне? указывают ли методы на один и тот же адрес, например, в C , и в этом случае, если мы рассматриваем класс с множеством методов и без атрибутов, какова «полезная нагрузка» памяти для создания большого количества объектов из этого класса?

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

Ответ №1:

Разные языки могут реализовать это по-разному. В случае C представьте, что компилятор берет методы вашего класса и преобразует их в свободные функции. Для преобразования его добавляют this в качестве первого параметра.

C

 class A
{
public:
    void f(bool b);

    // and other members
};

A a;
a.f(true);
  

преобразуется во что-то вроде:

 struct A
{
    // other members
}

void a_f(A* this, bool b);

A a;
a_f(amp;a, true);
  

Итак, теперь у нас есть C программа, с которой не нужно путать ООП.

Комментарии:

1. Отлично! Другой подсказкой мог бы быть своего рода синглтон (основной класс) только с методами и что-то вроде ссылки на этот основной класс для всех объектов, но мы близки к тому, что вы здесь выражаете. Большое вам спасибо