#include #include using namespace std; class FormaGeometrica{ public: virtual ~FormaGeometrica() {} virtual float perimetro() const = 0; virtual float area() const = 0; virtual string colore() const { return "blue"; } virtual void print() const = 0; }; class Quadrato: public FormaGeometrica{ public: Quadrato(){myLato=0;} Quadrato(float lato){myLato=lato;} virtual ~Quadrato(){} float lato() const {return myLato;} virtual float perimetro() const {return 4*myLato;} virtual float area() const {return myLato*myLato;} virtual void print() const { cout << "Quadrato l=" << lato() << " area " << area() << " colore " << colore() << endl; } private: float myLato; }; class Circonferenza: public FormaGeometrica{ public: Circonferenza(){myRaggio=0;} Circonferenza(float r){myRaggio = r;} virtual ~Circonferenza(){} float raggio() const {return myRaggio;} virtual float perimetro() const {return 4*3.14*myRaggio;} virtual float area() const {return 3.14*myRaggio*myRaggio;} string colore() const { return "red"; } virtual void print() const { cout << "Circonferenza r=" << raggio() << " area " << area() << " colore " << colore() << endl; } private: float myRaggio; }; void draw(FormaGeometrica* f) ; int main () { FormaGeometrica *q = new Quadrato(3.); FormaGeometrica *circ = new Circonferenza(3.); draw(q); draw(circ); q->print(); circ->print(); Circonferenza c(66.); cout <<"La circonferenza ha raggio "<perimetro() << " colore " << f->colore() << endl; }