БлогNot. У разных экземпляров класса методы - это разные функции в памяти или одна и та ж...

У разных экземпляров класса методы - это разные функции в памяти или одна и та же? :)

Одна и та же, если я правильно понял вопрос :) Приходится ещё и телепатом работать.

Метод класса с именем f() - это одна и та же функция для разных экземпляров класса, иначе размеры exe'шек были бы ещё намного больше :)

А вот свойства класса - это разные ячейки памяти у разных экземпляров, иначе непонятно, чем бы эти экземпляры отличались между собой.

Посмотрите на скрин ниже (из Visual Studio), там вроде всё понятно. Если создавать объекты не в стеке, а в куче, например, кодом

#include 

class A {
 int n;
public: 
 A();
 int f();
};

A::A() { n=0; }

int A::f() {
  return ++n;
}

int main() {
  A *a = new A(); A *b = new A();
  a->f();
  b->f();
  return 0;
}

там будет то же самое, только адреса, конечно, другие :)

Если нужно одно общее свойство для всех экземпляров класса, она объявляется статическим (static).

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

адреса функции и свойств в классе
адреса функции и свойств в классе

10.02.2017, 15:42 [2944 просмотра]


теги: c++ программирование учебное studio

К этой статье пока нет комментариев, Ваш будет первым