Home
Accesso / Registrazione
 di 

Programmazione orientata agli oggetti in ANSI-C. Selettori, Dynamic Linkage e Polimorfismo - esempio

Programmazione orientata agli oggetti in ANSI-C. Selettori, Dynamic Linkage e Polimorfismo - esempio

Anche se non abbiamo ancora implementato le stringhe, siamo già capaci di leggere un semplice programma di test. String.h definisce il tipo di dato astratto:

extern const void * String;

Tutti i nostri metodi sono comuni a tutti gli oggetti; di conseguenza, aggiungiamo la loro dichiarazione al file new.h che contiene gli header per le funzioni di gestione della memoria, file che abbiamo già introdotto nella sezione 1.4.

void * clone (const void * self);
int differ (const void * self, const void * b);
size_t sizeOf (const void * self);

I primi due prototipi dichiarano i selettori. Sono derivati dai corrispondenti componenti di struct Class semplicemente rimuovendo una indirezione dai dichiaratori. Ecco un esempio applicativo:

#include "String.h"
#include "new.h"
int main ()
{ void * a = new(String, "a"), * aa = clone(a);
void * b = new(String, "b");
printf("sizeOf(a) == %u\n", sizeOf(a));
if (differ(a, b))
puts("ok");
if (differ(a, aa))
puts("differ?");
if (a == aa)
puts("clone?");
delete(a), delete(aa), delete(b);
return 0;
}

In questo codice si creano due stringhe e si fa una copia delle stesse. Mostriamo la dimensione di un oggetto Stringa - non la dimensione del testo controllato dall'oggetto ! - e verifichiamo che due testi diversi siano contenuti in stringhe diverse. Infine, controlliamo che una copia sia uguale ma non identica all'originale e cancelliamo le stringhe. Se tutto fosse corretto il programma stamperebbe qualcosa come

sizeOf(a) == 8
ok

 

 

Scrivi un commento all'articolo esprimendo la tua opinione sul tema, chiedendo eventuali spiegazioni e/o approfondimenti e contribuendo allo sviluppo dell'argomento proposto. Verranno accettati solo commenti a tema con l'argomento dell'articolo stesso. Commenti NON a tema dovranno essere necessariamente inseriti nel Forum creando un "nuovo argomento di discussione". Per commentare devi accedere al Blog

 

 

Login   
 Twitter Facebook LinkedIn Youtube Google RSS

Chi è online

Ci sono attualmente 7 utenti e 69 visitatori collegati.

Ultimi Commenti