E dopo aver elucubrato in modo piuttosto ossessivo con i concetti di cui sopra e anche più, dopo essermi convinto che avevo capito davvero la cosa nonostante il mio parere contrario, inizio a mimare la realtà con il C++.
Ho un concetto astratto di Figura geometrica, che si concretizza in due concetti concreti di rettangolo e triangolo:
#include "iostream" using namespace std; class Figura{ protected: int base,altezza; public: Figura(int b,int a){ base=b;altezza=a; } virtual int area()=0; }; class Rettangolo:public Figura{ public: Rettangolo(int b, int a):Figura(b,a){} int area(){ return base*altezza; } }; class Triangolo:public Figura{ public: Triangolo(int b, int a):Figura(b,a){} int area(){ return base*altezza/2; } }; void StampaArea(Figura *fig){ cout << fig->area() << endl; getchar(); } void main(){ Rettangolo rect(3,4); Triangolo tri (3,4); StampaArea(&rect); StampaArea(&tri); }La funzione StampaArea si serve del polimorfismo accettando come parametro un puntatore del tipo classe base astratta genitrice delle classi Rettangolo e Triangolo.
Mi sembra tutto privo di problemi...
12 6
Nessun commento:
Posta un commento