Lezione X Laboratorio di Programmazione
Struttura di un programma Definizione classe e specifica (parziale) classe.hclasse.cpp main.cpp Specifica metodi mancanti in classe.h usando op. di scope resolution :: Include “classe.h”
Struttura di un programma (2) //file class.cpp #include “class.h” void c::prova() { //corpo funzione } //file class.h class c { public: void prova(); } //file main.cpp #include “class.h” void main() { c oggetto; oggetto.prova(); }
Il makefile Per la gestione di un progetto su piu’ files e’ possibile creare un makefile, contenente l’elenco delle dipendenze dei files e delle azioni per compilare e linkare i componenti. Class.h Class.cpp Main.cpp
Il makefile Etichetta Class.h Class.cpp Main.cpp all: main.o class.o g++ -o execName class.o main.o main.o : main.cpp g++ -c main.cpp class.o : class.cpp g++ -c class.cpp Files dipendenti da etichetta Cosa fare se bisogna aggiornare l’etichetta
Il makefile Class.h Class.cpp Main.cpp all: main.o class.o g++ -o execName class.o main.o main.o : main.cpp g++ -c main.cpp class.o : class.cpp g++ -c class.cpp All e’ il default quando si ricompila tutto il progetto All main.o class.o main.cppclass.cpp
Come usare make Il programma “make” prende in pasto un makefile ed esegue le compilazioni specificate. Uso (da riga di comando): make make all // all e’ l’etichetta di default make etichetta // si ricompila solo il sottoinsieme dipendente // da etichetta. Il make controlla se i files cpp e h sono stati aggiornati e ricompilare solo le parti di programma modificate.
Un po’ di strutture dati Oggi parliamo delle pile (stack in inglese) Mnemonico: pila di piatti Una pila e’ un insieme ordinato di oggetti dello stesso tipo su cui e’ possibile eseguire le seguenti operazioni: Push: inserimento in testa di un oggetto Pop: prelevamento dell’oggetto in testa Empty: flag che indica se la pila e’ vuota A C B Push D A C B D A C B C B Pop
La classe pila di interi La classe pila, dunque deve possedere almeno i 3 metodi: Push, Pop, Empty. Per implementare gli elementi ricorriamo ad un array, dove un indice top descrive l’elemento in testa: class pila { private: int* A; int top; public: int Pop( ); void Push ( int e); int Empty; };
La classe pila di oggetti Introduciamo i templates per descrivere una generica pila di oggetti della classe T: template class pila { private: T* A; int top; public: T Pop( ); void Push ( T e); int Empty; };
Come usare i templates template class pila { … }; // specificare un metodo con l’operatore :: template T pila :: Pop( ) { … } // e’ necessario specificare il tipo di pila // istanziare una pila pila P1; pila P2;
Programma del giorno Scrivere un programma che, utilizzando una pila di char, sia in grado di dire se in un file di testo la sequenza di parentesi tonde ( ad es. una espressione aritmetica) risulta bilanciata e coerente: (1+(2*3) Caso errato (1+(2*3)) Caso corretto (1+(2*3))) Caso errato