Sei sulla pagina 1di 1

PROGRAMMAZIONE (9 CFU) – A.A. 2010-2011 ES.

1. Scrivere una semplice gerarchia Persona -> Studente. Un oggetto della classe Persona avrà nome,
cognome e codice fiscale, relative set e get e un metodo print. Un oggetto della classe Studente avrà in
più la matricola e il corso di laurea (e relative set e get) e una nuova versione del metodo print. In
entrambe le classi prevedete la stampa di messaggi che segnalino l’esecuzione di costruttori e
distruttori. Scrivete infine un semplice esempio in cui create oggetti delle due classi, verificate il corretto
funzionamento dei vari metodi e l’ordine di chiamata di costruttori e distruttori.

2. Scrivere una classe Punto2D e una classe Punto3D da essa derivata. Entrambe le classi devono
disporre di metodi set e get e di un metodo per il calcolo della distanza fra due punti. In Punto3D
scrivete anche un costruttore che costruisce un punto 3D a partire da un punto 2D (e ad esempio pone a
0 la terza coordinata se non specificata). Scrivete infine un programma di test che utilizza le classi
implementate.

3. Molti programmi che fanno uso dell’ereditarietà potrebbero essere scritti in termini di composizione e
viceversa. Mettete a confronto i due approcci nel caso di una gerarchia Point, Circle e Cylinder.
Ereditarietà: un cerchio è un punto con in più il raggio, un cilindro è un cerchio con in più l’altezza.
Composizione: un cerchio ha un punto (il centro) e un raggio, un cilindro ha una cerchio (la base) e
un’altezza.

4. Estendete la gerarchia dell’esercizio 1 per rappresentare i seguenti oggetti: Persona, Studente,


Impiegato, Docente, Amministrativo. Per ogni classe indicare attributi e comportamenti (metodi) in
comune che giustificano la gerarchia. Implementate tutte le classi e una classe Facolta che al suo
interno contiene un’array di studenti, uno di impiegati amministrativi e uno di docenti. Se lo ritenete
opportuno definite altre classi che dovessero essere utili. Scrivete infine un programma di test che
utilizza le classi implementate.

5. Progettate una classe String. La classe deve fondamentalmente:


a. contenere un array di char di cui fisserete la lunghezza massima,
b. permettere le operazioni più comuni (definite, tra gli altri, un metodo len() che restituisce la
lunghezza della stringa ed un metodo append() per concatenare 2 stringhe)
c. avere un metodo che restituisce il suo contenuto in formato standard C (array di char con 0 alla
fine).
Fate attenzione a che i metodi siano tutti intrinsecamente sicuri (non deve essere possibile scrivere su
zone di memoria non riservate come invece accade per le funzioni della libreria cstring. Fornite la
definizione della classe (il file "String.h"), l'implementazione dei metodi len() e append(...) e una
descrizione funzionale degli altri metodi che pensate di includere.
Una volta verificato il corretto funzionamento della vostra classe estendetela definendo un costruttore
che costruisce un oggetto String a partire da una stringa stile C, il distruttore e il costruttore di copie.
Inserite nei costruttori e nel distruttore la stampa di un messaggio che identifica il costruttore utilizzato e
l’oggetto per cui è invocato e verificate l’ordine di chiamata di costruttori e distruttori nei casi di
passaggio di parametro oggetto a funzione o di restituzione di oggetto da funzione.