Visualizzazione dei risultati da 1 a 4 su 4
  1. #1

    [C++] Polimorfismo

    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:


    codice:
    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

  2. #2
    Ho risolto passando all'array i puntatori alle figure:

    codice:
    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"

  3. #3
    codice:
    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:
    codice:
    figure &ar[] = {r,t,c,r2,t2};
    for(int i=0;i<sizeof(ar)/sizeof (*ar);++i) {
    	ar[i].area();
    }

  4. #4
    grazie!

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2024 vBulletin Solutions, Inc. All rights reserved.