/*
пример ООП для C
*/
// описание интерфейса с именем "interface"
struct interface
{
struct interface_tab * iface;
};
// описания класса "class1" реализующего интерфейс "interface"
struct class1
{
struct interface_tab * iface;
int field1;
int field2;
};
union interface_obj {
struct interface iface;
// добавляем сюда все классы реализующие этот интерфейс
struct class1 class1;
};
struct interface_tab
{
int (*metod1)(union interface_obj * ,int,int);
int (*metod2)(union interface_obj * ,int);
};
int class1_metod1(union interface_obj * self ,int a,int b)
{
self->class1.field1=a;
self->class1.field2=b;
return(1);
}
int class1_metod2(union interface_obj * self ,int a)
{
return(self->class1.field1*a + self->class1.field2);
}
static struct interface_tab class1_iface =
{
class1_metod1,
class1_metod2,
};
// создание екземпляра класса "class1" с именем "obj"
struct class1 class1_obj={&class1_iface,0,0};
// так ето работает:
int main ()
{
union interface_obj * obj = (union interface_obj *)&class1_obj;
obj->iface.iface=&class1_iface;
obj->iface.iface->metod1(obj,3,6);
printf("result:%i\nwrite for 2ch.ru by Katalog-kun, 2008.12.11\nphone +7-903-513-64-21\n", obj->iface.iface->metod2(obj,10)
);
return 0;
}
LyoK0L/RgNC40LzQtdGAINCe0J7QnyDQtNC70Y8gQwoqLwovLyDQvtC/0LjRgdCw0L3QuNC1INC40L3RgtC10YDRhNC10LnRgdCwINGBINC40LzQtdC90LXQvCAiaW50ZXJmYWNlIgpzdHJ1Y3QgaW50ZXJmYWNlCnsKICBzdHJ1Y3QgaW50ZXJmYWNlX3RhYiAqIGlmYWNlOwp9OwoKLy8g0L7Qv9C40YHQsNC90LjRjyDQutC70LDRgdGB0LAgImNsYXNzMSIg0YDQtdCw0LvQuNC30YPRjtGJ0LXQs9C+INC40L3RgtC10YDRhNC10LnRgSAiaW50ZXJmYWNlIgpzdHJ1Y3QgY2xhc3MxCnsKICBzdHJ1Y3QgaW50ZXJmYWNlX3RhYiAqIGlmYWNlOwogIGludCBmaWVsZDE7CiAgaW50IGZpZWxkMjsKfTsKCnVuaW9uIGludGVyZmFjZV9vYmogewogICBzdHJ1Y3QgaW50ZXJmYWNlIGlmYWNlOwogICAvLyDQtNC+0LHQsNCy0LvRj9C10Lwg0YHRjtC00LAg0LLRgdC1INC60LvQsNGB0YHRiyDRgNC10LDQu9C40LfRg9GO0YnQuNC1INGN0YLQvtGCINC40L3RgtC10YDRhNC10LnRgQogICBzdHJ1Y3QgY2xhc3MxIGNsYXNzMTsKfTsKCnN0cnVjdCBpbnRlcmZhY2VfdGFiCnsKICAgaW50ICgqbWV0b2QxKSh1bmlvbiBpbnRlcmZhY2Vfb2JqICogLGludCxpbnQpOwogICBpbnQgKCptZXRvZDIpKHVuaW9uIGludGVyZmFjZV9vYmogKiAsaW50KTsKfTsKCmludCBjbGFzczFfbWV0b2QxKHVuaW9uIGludGVyZmFjZV9vYmogKiBzZWxmICxpbnQgYSxpbnQgYikKewogICBzZWxmLT5jbGFzczEuZmllbGQxPWE7CiAgIHNlbGYtPmNsYXNzMS5maWVsZDI9YjsKICAgcmV0dXJuKDEpOwp9CmludCBjbGFzczFfbWV0b2QyKHVuaW9uIGludGVyZmFjZV9vYmogKiBzZWxmICxpbnQgYSkKewogICByZXR1cm4oc2VsZi0+Y2xhc3MxLmZpZWxkMSphICsgc2VsZi0+Y2xhc3MxLmZpZWxkMik7Cn0KCnN0YXRpYyBzdHJ1Y3QgaW50ZXJmYWNlX3RhYiBjbGFzczFfaWZhY2UgPQp7CiAgY2xhc3MxX21ldG9kMSwKICBjbGFzczFfbWV0b2QyLAp9OwoKLy8g0YHQvtC30LTQsNC90LjQtSDQtdC60LfQtdC80L/Qu9GP0YDQsCDQutC70LDRgdGB0LAgImNsYXNzMSIg0YEg0LjQvNC10L3QtdC8ICJvYmoiCnN0cnVjdCBjbGFzczEgY2xhc3MxX29iaj17JmNsYXNzMV9pZmFjZSwwLDB9OwoKLy8g0YLQsNC6INC10YLQviDRgNCw0LHQvtGC0LDQtdGCOgppbnQgbWFpbiAoKQp7CiAgICB1bmlvbiBpbnRlcmZhY2Vfb2JqICogb2JqID0gKHVuaW9uIGludGVyZmFjZV9vYmogKikmY2xhc3MxX29iajsKCiAgICBvYmotPmlmYWNlLmlmYWNlPSZjbGFzczFfaWZhY2U7IAoKICAgIG9iai0+aWZhY2UuaWZhY2UtPm1ldG9kMShvYmosMyw2KTsKCiAgICBwcmludGYoInJlc3VsdDolaVxud3JpdGUgZm9yIDJjaC5ydSBieSBLYXRhbG9nLWt1biwgMjAwOC4xMi4xMVxucGhvbmUgKzctOTAzLTUxMy02NC0yMVxuIiwKICAgIG9iai0+aWZhY2UuaWZhY2UtPm1ldG9kMihvYmosMTApCiAgICApOwoKICAgIHJldHVybiAwOwp9Cg==