Laboratorio di Calcolo II AA 2003/04

Esercitazione 3, settimana del 10/5

 

1. Definire ed Implementare la classe Sonda (Sonda.h e Sonda.cc) secondo lo schema discusso nella lezione 4, aggiornare il programma simula.cc . Riflettere su:

a. Perche' e' possibile aggiungere una sonda nel sistema solare senza cambiare nulla nella definizione e nella implementazione della classe Sistema Solare?

b. Quali variazioni e' stato necessario apportare alla Classe CorpoCeleste?

c. Perche' nel metodo CalcolaPosizione di Sonda viene invocato esplicitamente il metodo calcolaPosizione di Corpo Celeste? E con quale sintassi?

 

2. Studiare:

1.      Funzionamento dei costruttori e distruttori

Verificare, attraverso l'uso di istruzioni di stampa nei costruttori e nei distruttori, come funziona il meccanismo di creazione e di distruzione per classi legate tra loro da una relazione di ereditarieta', sia nel caso di oggetti ai quali si accede direttamente, sia nel caso di oggetti ai quali si accede con puntatori della classe stessa o con puntatori alla classe da cui l'oggetto eredita . Si consiglia di utilizzare (modificandoli per aggiungere una sonda) i programmi main Es1_a , Es1_b e o Es1_cbis/Es1_dbis dell'esercitazione 1.

 

2.      Uso di metodi virtuali

Utilizzando l'accesso agli oggetti attraverso i puntatori (Es1_cbis/Es1dbis) o mediante gli oggetti stessi (Es1_a), verificate il funzionamento del polimorfismo invocando il metodo CalcolaPosizione. Verificate quali risultati si ottengono definendo o non definendo il metodo come virtual. Verificate che solo definendo opportunamente il metodo come virtual e' possibile accedere correttamente ad esso attraverso un vettore di puntatori.

 

3.      Distruttori virtuali

Verificate il meccanismo di funzionamento dei distruttori, definendo o non definendo il distruttore di CorpoCeleste come virtual. Accedete agli oggetti attraverso vettori di puntatori o attraverso gli oggetti stessi.

 

4.      Uso di classi astratte

Rendete la classe "piu' in alto" nella catena ereditarieta' (CorpoCeleste) una classe astratta, definendo almeno un metodo come pure virtual. Verificate che in questo caso

i) Tutte le classi che erditano (nel nostro caso Sonda) devono fornire l'implementazione del metodo pure virtual

ii)                  Non e' piu' possibile istanziare un oggetto della classe astratta (CorpoCeleste)