Вам даны две структуры. Один типа «А», другой типа «В».
У типа 'B' есть структура типа 'A'. Так что-то вроде этого:
struct A {
void print_stuff(A * a){ puts("From A"); }
};
struct B {
A a_part;
char * s;
void print_stuff(B * b){
printf("From B\n\t%s\n", b->s);
}
};
B * B_new(char * str) {
B * b = (B*)malloc(sizeof(struct B));
b->s = strdup(str);
return b;
}
Вы хотите иметь возможность вызывать функцию print_stuff в struct B, даже с кодом, подобным этому:
A * aptr = (A*) B_new("foo");
aptr->print_stuff(aptr);
Вам НЕ разрешено использовать наследование, контейнеры C ++ или классы. Структура B ДОЛЖНА иметь a_part.
Как бы вы написали свой код так, чтобы независимо от типа указателя вызывалась правильная функция print_stuff (в этом случае, если указатель на структуру типа B был приведен к A *, как бы вы гарантировали, что вызывается функция print_stuff в B)?