Здравствуйте, Ash-2, Вы писали:
A2>Кто-нибудь может объяснить: чем статические функции в классах отличаются от обычных?
A2>1. Есть мнение: "Каждый экземпляр класса содержит все элементы этого класса..." С данными все понятно, но функция — тоже элемент, т.е. если у меня 2 экземпляра класса, то должно быть два экземпляра функции
(т.е. один и тот же код в памяти по разным адресам... бред...)
действительно бред.
A2>2. Есть другое мнение (нравится больше):
A2>class A{
A2> void Fun(int i);
A2>}
A2>Функция Fun, заменяется компилятором на
A2>void Fun(int i, A* pointer);
A2>И соответственно при вызове передается только указатель на класс....
на самом деле все нестатические функции-члены имеют неявный первый параметр, имя которому this
A2>НО, тогда непонятно чем отличается статическая функция, почему адрес этой функции известен на этапе компиляции и почему именно статическая "одна для всех экземпляров" (ведь и эта функция — одна)???
потому что это фактически обычная функция, не имеющая скрытых параметров, и просто "спрятанная" в пространстве имен класса.
A2>Спасибо за то, что дочитали до конца, ну а если еще и ответите...