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