Esercitazioni del
corso
di Laboratorio di Calcolo
n. 10
16 giugno 2005
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