Esercitazioni del corso di Laboratorio di Calcolo
 n. 9
 15 giugno 2006
ereditarieta'



Vi vengono fornite tre classi, mediante il loro header file:

classe figura2d
questa classe descrive una figura bidimensionale inizialmente la classe contiene un costruttore, un distruttore ed un metodo di stampa (print).
Per semplicita' i metodi sono definiti "inline" ovvero all'interno dello stesso file .h (non c'e' un file .cc)

classe cerchio
questa classe descrive i cerchi.
Eredita di figura2d in modo pubblico e anche in questo caso si sono definiti i metodi "inline".

classe quadrato
questa classe descrive i quadrati.
Eredita di figura2d in modo pubblico e anche in questo caso si sono definiti i metodi "inline".

ed un programma main (geometria.cc) che costruisce oggetti appartenenti a queste tre classi in due diversi modi:
- allocandoli staticamente
- allocandoli dinamicamente e salvandone il puntatore in un vettore di puntatori a figura2d

1. scaricate i quattro files
2. compilate il programma geometria.cc ed eseguitelo
3. eseguitelo salvandone l'uscita su un file, mediante la "ridirezione dell'output", ovvero a.out > geometria1.txt
4. editate geometria.txt ed inseritevi i vostri commenti, in particolare vorrei sapere quali costruttori e distruttori vengono chiamati nei vari punti e perche'
5. ora provate a modificare figura2d.h
      a. inserendo la parola virtual davanti a void print ( ), salvate l'output su geometria2.txt e in questo files commentate i punti in cui vi sono cambiamenti
      b. inserendo la parola virtual davanti a ~figura2d( ), salvate l'output su geometria3.txt e in questo files commentate i punti in cui vi sono cambiamenti
      c. aggiungendo il metodo virtual double Area( )=0; (basta togliere i commenti alla riga 30)
          in questo caso il programma non compilera' piu'.

          I problemi sono 2:
          - l'aggiunta di un metodo "pure virtual" (=0!) rende la classe "puramente astratta" e non consente piu' di costruire oggetti figura2d
          - tutte le classi derivate sono costrette dal meccanismo di ereditarieta' a fornire un metodo double Area( )
          Risolveteli cosi':
          - sostituite nel main le istruzionioni che cercano di costruire oggetti figura2d con altri cerchi o quadrati
          - aggiungete a cerchio e quadrato il metodo double Area( ) che ne calcola le superfici, rispettivamente come M_PI*raggio*raggio e lato*lato