Embora a linguagem não seja orientada a objetos, você ainda pode adicionar alguns recursos semelhantes a objetos às suas estruturas C, como subclasses, métodos e sobrecarga.
Se você deseja criar uma “subclasse” da seguinte estrutura:
typedef struct {
int value;
} base_struct;
Você acabou de fazer uma nova estrutura e adicionar a antiga no topo:
typedef struct {
base_struct super;
int value2;
} sub_struct;
Você pode então converter a nova estrutura para a antiga para acessar seus membros:
sub_struct s;
s.value2 = 13;
((base_struct)s).value = 37;
Adicionar “métodos” é apenas um ponteiro de função em uma estrutura:
typedef struct _some_struct {
int value;
void (*set_value)(_some_struct *self, int new_value);
} some_struct;
E chamando de:
some_struct *s = {};
s->set_value(s, 42);
Este método sempre pode ser “sobrecarregado” apenas alterando o ponteiro de função.