Показать сообщение отдельно
Старый 15.05.2014, 17:53   #2
impersonalis
Зануда с интернетом
 
Аватар для impersonalis
 
Регистрация: 04.09.2005
Сообщений: 14,014
Написано 6,798 полезных сообщений
(для 20,935 пользователей)
Ответ: Указатели на функции.

Жутко накрученный пример в 1-ом посте. Вот попроще набросал:
#include <iostream>

using namespace std;

class Object{
    private:
        static unsigned short counter;
        unsigned short ID;
    public:
        Object();
        void Show(char s)const;
};

unsigned short Object::counter=0;

Object::Object(){
    this->counter++;
    this->ID=counter;
}

void Object::Show(char s)const{
    cout<<'['<<this->ID<<"]: "<<s<<endl;
}

int main()
{
    void (Object::*FuncPtr)(char s)const = &Object::Show;

    Object x1;
    Object x2;

    (x1.*FuncPtr)('a');
    (x2.*FuncPtr)('b');

    x1.Show('a');
    x2.Show('b');

    return 0;
}
Пример (среди прочего) доступно демонстрирует момент архитектуры. Функции для всех объектов класса создаются в единственном экземпляре единожды. Уточнение, для какого объекта функция вызывается (если функция не статическая) необходимо только непосредственно в момент вызова (чтобы определить к какой копии набора компонентов класса обращаться).
Сравни то же на Б3Д
Type TObject
	Field ID%
End Type

Global TObject__counter%=0

Function TObject__TObject.TObject()
	Local TObj.TObject=New TObject
	TObject__counter=TObject__counter+1
	TObj\ID=TObject__counter
	Return TObj
End Function

Function TObject__Show(TObj.TObject,s$)
	Print "["+Str(TObj\ID)+"]: "+s
End Function

x1.TObject=TObject__TObject()
x2.TObject=TObject__TObject()

TObject__Show(x1,"a")
TObject__Show(x2,"b")

WaitKey()
End
Синтаксис C++ позволяет реализовать вызов TObject__Show(x1,"a") как x1.TObject__Show("a"). При этом функция TObject__Show по-прежнему размещается в памяти единожды.
__________________
http://nabatchikov.com
Мир нужно делать лучше и чище. Иначе, зачем мы живем? tormoz
А я растила сына на преданьях
о принцах, троллях, потайных свиданьях,
погонях, похищениях невест.
Да кто же знал, что сказка душу съест?
(Offline)
 
Ответить с цитированием