PDA

Visualizza la versione completa : [C++] Polimorfismo nel calcolo dell'area


Vincent22
04-10-2011, 12:17
Salve a tutti, mi sto avvicinando alla programmazione C++ e sto studiando la parte relativa all'ereditarietÓ e polimorfismo.
Ho capito come funziona ma ho un dubbio.

Venendo dalla programmazione Java volevo provare l'esempio "classico" delle figure. Tutto funziona, per cui creo la classe base "figure" e le classe derivate "triangle, circle, ecc...".

Il problema Ŕ se voglio mettere in atto il polimorfismo come sono abituato a fare non funziona...Nel main:



figure ar[5] = {r,t,c,r2,t2};
p = &r2;
p->area();
p = ar;
while(n<5){
p->area();
n++;
p++;
}


Creo un array di figure, faccio puntare un puntatore di figure all'array e vorrei eseguire il metodo di calcolo dell'area per ogni figura contenuta nell'array, ma viene eseguito il metodo "area()" della classe base "figure" e non il metodo area() corrispettivo di ogni figura.
Come fare in C++ a eseguire qualcosa del genere? Immagino che il problema sia perchŔ inserisco le figure in un array di tipo "figure".
Grazie

Vincent22
04-10-2011, 12:36
Ho risolto passando all'array i puntatori alle figure:


figure *p, *rp, *tp, *t2p, *r2p, *cp;
rectangle r, r2;
triangle t, t2;
circle c;
rp = &r;
tp = &t;
t2p = &t2;
r2p = &r2;
cp = &c;
figure *ar[SIZE] = {rp,tp,cp,r2p,t2p};
for(int i=0;i<SIZE;i++) {
ar[i]->area();
}

mi chiedevo se Ŕ la soluzione corretta o se in C++ si utilizzano tecniche "migliori"

MacApp
04-10-2011, 15:47
figure *ar[] = {&r,&t,&c,&r2,&t2};
for(int i=0;i<sizeof(ar)/sizeof (*ar);++i) {
ar[i]->area();
}


puoi usare anche un array di riferimenti:


figure &ar[] = {r,t,c,r2,t2};
for(int i=0;i<sizeof(ar)/sizeof (*ar);++i) {
ar[i].area();
}

Vincent22
04-10-2011, 15:55
grazie!

Loading