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.

Scarica subito una copia gratis

Scrivi un commento

Seguici anche sul tuo Social Network preferito!

Send this to a friend