Home
Accesso / Registrazione
 di 

Programmazione orientata agli oggetti in ANSI-C. Un esempio - list

Programmazione orientata agli oggetti in ANSI-C. Un esempio - list

Come esempio di quanto possiamo fare con isOf() e come cast() può rendere più sicuro il codice, consideriamo le modifiche seguenti in relazione al programma di test.

#include "Circle.h"
#include "List.h"
int main (int argc, char ** argv)
{ void * q;
unsigned n;
initList();
initCircle();
q = new(List, 1);
while (* ++ argv)
switch (** argv) {
case ’+’:
switch ((* argv)[1]) {
case ’c’:
addFirst(q, new(Circle, 1, 2, 3));
break;
case ’p’:
addFirst(q, new(Point, 4, 5));
break;
default:
addFirst(q, new(Object));
}
break;
case ’—’:
puto(takeLast(q), stdout);
break;
case ’.’:
n = count(q);
while (n —— > 0)
{ const void * p = takeFirst(q);
if (isOf(p, Point))
draw(p);
else
puto(p, stdout);
addLast(q, p);
}
break;
default:
if (isdigit(** argv))
addFirst(q, (void *) atoi(* argv));
else
addFirst(q, * argv + 1);
}
return 0;
}

Per argomenti che iniziano con + il programma aggiunge cerchi, punti e altri oggetti ad una lista. L'argomento – rimuove l'ultimo oggetto e lo mostra con puto(). L'argomento . mostra il contenuto corrente della lista, draw() viene usato se una entry è derivata da Point. Infine, vi è un deliberato tentativo di inserire numeri o altre stringhe come argumenti nella lista sebbene essi possano causare problemi quando vengono rimossi. Ecco un esempio di un possibile output:

$ list +c +p + — . 1234
Circle at 0x122f4
Object at 0x12004
"." at 4,5
Object.c:66: failed assertion `sig == 0’

Come vedremo nella sezione 8.4, addFirst() usa cast() per assicurarsi che vengano aggiunti solamente oggetti alla lista. Cast() può essere inoltre resa più robusta e quindi avere la capacità di scoprire se una stringa o un numero vengono passati come oggetti.

 

 

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
ritratto di Michi

Ma cosa diamine ha a che

Ma cosa diamine ha a che fare questo snippet con l'orientamento agli oggetti?

 

 

Login   
 Twitter Facebook LinkedIn Youtube Google RSS

Chi è online

Ci sono attualmente 14 utenti e 86 visitatori collegati.

Ultimi Commenti