#include #include using namespace std; class Forma { public: virtual ~Forma() { cout << "FOrma muoio." << endl; } virtual float area() = 0; virtual float perimetro() = 0; virtual int colore() { return 1;} private: }; class Quadrato : public Forma { public: Quadrato() { lato_ = 0; } Quadrato(float lato) { lato_ = lato; } virtual ~Quadrato() {} virtual float area() { return lato()*lato(); } virtual float perimetro() { return lato()*4.; } float lato() { return lato_; } private: float lato_; }; class TriangoloEquilatero : public Forma { public: TriangoloEquilatero() { lato_ = 0; } TriangoloEquilatero(float lato) { lato_ = lato; } virtual ~TriangoloEquilatero() {} virtual float area() { return lato()*lato()*sqrt(3)/2; } virtual float perimetro() { return lato()*3.; } float lato() { return lato_; } private: float lato_; }; const float piGreco = 3.1415492; class Cerchio : public Forma { public: Cerchio() { raggio_ = 0.;} Cerchio(float raggio) { raggio_ = raggio ; } virtual ~Cerchio() { cout << "Cerchio muoio" << endl; } virtual float area() { return piGreco*raggio()*raggio();} virtual float perimetro() { return piGreco*raggio()*2;} float raggio() { return raggio_;} virtual int colore() { return 2;} private: float raggio_; }; int main() { // Quadrato q1(10); // Cerchio c1(55); // cout << "Quadrato area: " << q1.area() << " colore " << q1.colore() << endl; // cout << "Cerchio area: " << c1.area() << " colore " << c1.colore() << endl; // Quadrato * q2 = new Quadrato(666); // cout << "Quadrato area: " << q2->area() << " colore " << q2->colore() << endl; // delete q2; Forma* pf1 = new Cerchio(100); Forma* pf2 = new Quadrato(100); Forma* pf3 = new TriangoloEquilatero(100); const int num = 3; Forma* forme[num]; forme[0]=pf1; forme[1]=pf2; forme[2]=pf3; for (int i=0; iarea() << " colore " << forme[i]->colore() << endl; } // cout << "Forma area: " << pf->area() << " colore " << pf->colore() << endl; for (int i=0; i