#include using namespace std; class Poligono { protected: // specificatore di accesso per le classi derivate. Se commentassi questa istruzione ? double base, altezza; public: void set_values (double a, double b){base=a; altezza=b; } }; class Rettangolo: public Poligono { public: double area () {return (base * altezza);} // }; class Triangolo : public Poligono{ public : double area() {return ( base * altezza / 2); } }; int main () { Rettangolo ret1; Triangolo trian1; Poligono * polptr1 = &ret1; // riferimento di tipo Rettangolo a puntatore di tipo Poligono. Conversione di tipo OK //il rettangolo e' un poligono ma non necessariamente un poligono e' una rettangolo!!!!! Poligono * polptr2 = &trian1; polptr1->set_values(5.0, 6.0); polptr2->set_values(10.0, 28.0); cout << "area rettangolo = " << ret1.area() << "; area triangolo = " << trian1.area() << endl; //metodo area() solo nelle classi derivate (perche' diverse tra di loro) e non in quella base! return (0); }