Programmazione orientata agli oggetti in ANSI-C. Manutenzione delle gerarchie di classe. Inizializzazione

Programmazione orientata agli oggetti in ANSI-C. Manutenzione delle gerarchie di classe. Inizializzazione

Tipicamente, otteniamo una descrizione di classe spedendo new() ad una descrizione di metaclasse. Nel caso di Class e Object vediamo le seguenti chiamate:

const void * Object = new(Class,
"Object", Object, sizeof(struct Object),
ctor, Object_ctor,
dtor, Object_dtor,
differ, Object_differ,
puto, Object_puto,
0);
const void * Class = new(Class,
"Class", Object, sizeof(struct Class),
ctor, Class_ctor,
dtor, Class_dtor,
0);

Sfortunatamente, entrambe le chiamate si affidano l’una all’altra prima che siano state completate. Di conseguenza, l’implementazione di Class e Object in Object.c richiede una inizializzazione statica delle descrizioni di classe.

Questo è l’unico punto in cui inizializziamo esplicitamente una struct Class.

static const struct Class object [] = {
{ { object + 1 },
"Object", object, sizeof(struct Object),
Object_ctor, Object_dtor, Object_differ, Object_puto
},
{ { object + 1 },
"Class", object, sizeof(struct Class),
Class_ctor, Class_dtor, Object_differ, Object_puto
}
};
const void * Object = object;
const void * Class = object + 1;

Un nome di array è l’indirizzo del primo elemento dell’array e possiamo già utilizzarlo per inizializzare i componenti degli elementi. Faremo in seguito riferimento all’inizializzazione di struct Object per farvi notare aspetti interessanti dell’inizializzazione tramite array.

STAMPA     Tags:

Leave a Reply