Вот я тут подумал - почему народ все тянется к С++ и не
программит на С? С++ этоже такой немеряный отстой .. я не
говорю о том что ООП кал - ООП супер вещь но на С он явно
не ложится .. если нужен обязательно ООП подход и писать
надо на С - то все(может быть почти все) можно
реализовать на С например классы или наследования
достаточно простым путем.
struct class_ex {
int pubint1;
int pubint2;
char *pubstr3;
int (*getpub1)(struct class_ex *this); /* method */
int (*getpub2)(struct class_ex *this); /* method */
int (*getpub3)(struct class_ex *this); /* method */
int (*convert)(struct class_ex *this, int, char*);
..
};
наследование от одного предка
strct parent {
int data1;
int data2;
char *data3;
... /* methods */
}
struct p_parent {
struct parent;
int data_specific_to_p_parent;
char kkk[12];
.... /* p_parent specific methods */
};
struct pp_parent {
struct p_parent;
int data_specific_to_pp_parent;
.... /* pp_parent specific methods */
};
...
...
#define PARENT(x) (struct parent*)(x)
#define P_PARENT(x) (struct p_parent*)(x)
#define PP_PARENT(x) (struct pp_parent*)(x)
если нужно множественное наследование то это тоже можно
реализовать высчитывая соответствующие оффсеты.
помоему это гораздо наглядние и быстрее и натуральнее и
вообще более по настоящему нежеле в C++
struct class_ex*
init_newclass(void)
{
struct class_ex *newc;
newc = (struct class_ex*)malloc(sizeof(struct class_ex));
/* TODO: err checks */
newc->getpub1 = class_getpub1;
newc->getpub2 = class_getpub2;
newc->getpub3 = class_getpub3;
newc->convert = class_convert;
...
return newc;
}
newc = init_newclass();
P_PARENT(newc)->get_p_sec_val(P_PARENT(newc));
newc->pub1 = 2;
p1 = newc->getpub1(newc);
помоему все это гораздо натуральнее и нет той херовости
что в C++
Форум —
Development
