Corso di Programmazione 1 (9CFU) Prof. Valeria Vittorini
Si realizzi in C++ la seguente gerarchia di classi. La classe Articolo una classe ASTRATTA che prevede le seguenti variabili membro: char * codice; float prezzo; Su un oggetto di tipo articolo possono essere effettuate dallutente le seguenti operazioni: stampa_Dati() e CalcolaOfferta(). La funzione stampa_Dati applicata ad un oggetto stampa a video tutti i dati relativi alloggetto stesso. La funzione CalcolaOfferta stabilisce se possibile effettuare uno sconto sul prezzo di un articolo. Dalla classe Articolo devono essere derivate in modalit pubblica le classi DVD_FILM e Videogioco. La classe DVD_FILM prevede le seguenti funzioni membro: char * titolo; int anno; //lanno di uscita del film La classe ridefinisce le funzioni stampa_Dati() e CalcolaOfferta(). La classe Videogioco prevede le seguenti funzioni membro: char * nome; char * TipoStation; //PS3, NintendoDS, Wi_i. La classe ridefinisce le funzioni stampa_Dati() e CalcolaOfferta(). Si implementino le funzioni membro necessarie ad una corretta gestione dellestensione dinamica degli oggetti della gerarchia. La funzione CalcolaOfferta stabilisce se per un dato articolo previsto sconto sul prezzo e in caso affermativo fornisce il prezzo effettivo dellarticolo (senza modificare il prezzo di partenza definito nella classe base). Nel caso di un DVD_FILM la funzione CalcolaOfferta applica uno sconto del 20% sul prezzo base se lanno di uscita del film precedente al 1990. Nel caso di un Videogioco la funzione offerta applica uno sconto del 15% sul prezzo base su tutti i videogiochi per la PS3. Si tenga presente che si vuole un comportamento polimorfo delle funzioni CalcolaOfferta e stampa_Dati. Si realizzi quindi una PILA di Articoli rappresentata mediante una lista a puntatori che consenta di gestire sia DVD_FILM che Videogiochi. Si realizzino sulla pila le classiche funzionalit per la gestione LIFO degli elementi (push, pop, top ed i predicati empty e full) e una funzione di stampa che consenta di visualizzare i dati relativi agli articoli presenti nella pila. La funzione pop deve lanciare una eccezione nel caso si tenti di estrarre da una pila vuota. Si realizzi un programma di test per le classi implementate che gestisca leccezione eventualmente lanciata dalla funzione membro pop. Si strutturi il codice dellintera applicazione (programma principale e classi) secondo le appropriate tecniche di programmazione modulare (illustrate al corso e nei testi adottati).