У разных экземпляров класса методы - это разные функции в памяти или одна и та же? :)
Одна и та же, если я правильно понял вопрос :) Приходится ещё и телепатом работать.
Метод класса с именем f()
- это одна и та же функция для разных экземпляров класса, иначе размеры exe'шек были бы ещё намного больше :)
А вот свойства класса - это разные ячейки памяти у разных экземпляров, иначе непонятно, чем бы эти экземпляры отличались между собой.
Посмотрите на скрин ниже (из Visual Studio), там вроде всё понятно. Если создавать объекты не в стеке, а в куче, например, кодом
#includeclass 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 просмотра]