Programmazione orientata agli oggetti in ANSI-C. Implementazione

Con gli assiomi di cui sopra, i metodi isA() e isOf() sono abbastanza semplici da implementare:

% isA {
return _self && classOf(_self) == class;
}
% isOf {
if (_self)
{ const struct Class * myClass = classOf(_self);
if (class != Object)
while (myClass != class)
if (myClass != Object)
myClass = super(myClass);
else
return 0;
return 1;
}
return 0;
}

Una prima, molto semplice implementazione di cast() si può basare su isOf():

% cast {
assert(isOf(_self, class));
return (void *) _self;
}

isOf(), e di conseguenza cast(), determinano errori se i puntatori sono null. IsOf() si basa senza ulteriori verifiche che un qualsiasi puntatore punti ad almeno un'istanza di Object: di conseguenza possiamo essere sicuri che cast(Object,x) restituirà errori solamente di fronte a puntatori nulli. Tuttavia, come vedremo nella sezione 8.5, questa soluzione è ampiamente perfettibile.

Scarica subito una copia gratis

Una risposta

  1. Avatar photo Emanuele 5 Agosto 2010

Scrivi un commento

Seguici anche sul tuo Social Network preferito!

Send this to a friend