Fondamenti di Informatica 2 Ingegneria Informatica Docente: Giovanni Macchia a.a
Template Una delle problematiche più attuali del software è il riutilizzo del codice in altri contesti. La possibilità del riuso del software comporta una notevole economia a livello di produzione, consentendo una immissione anticipata sul mercato del prodotto software. Il C++ favorisce il riuso del software tramite lo strumento dei template. I template consentono di creare delle funzioni template e delle classi template.
Template: Funzioni template Se le operazioni compiute su ogni tipo di dato sono le stesse, si utilizzano le funzioni template. Una funzione template prende la forma generale con la parola chiave template: template tipo_ritorno funzione (lista_parametri) {corpo della funzione} Tipo1, Tipo2,… sono dei tipi che possono essere usati dalla funzione ed essere impiegati all’interno della funzione.
Template: Funzioni template Es: template void swap(X &a, X&b) { X tmp; tmp =a; a = b; b= tmp; } int a,b; float c,d; swap (a,b); swap (c,d);
Template: Funzioni template Quando il compilatore crea una versione specifica di una funzione template, si parla di creazione di specializzazione, chiamata anche funzione generata. L’atto di generare una funzione viene definito con il termine istanziare. Una funzione generata è quindi un’istanza specifica di una funzione template. E’ possibile usare parametri standard com parametri di tipo generico in una funzione template. E’ possibile effettuare l’overloading delle funzioni template.
Template: Classi template Le classi template consentono di definire delle classi che sfruttano una logica che può essere generalizzata. Una classe template prende la forma generale: template class nome_classe {corpo della classe} Tipo1, Tipo2,… sono dei tipi che possono essere usati dalla classe ed essere impiagati all’interno della classe.
Template: Classi template Per istanziare un oggetto di classe template, si usa la forma nome_classe nome_oggetto; Es.: template class queue { X q[100]; int r,s; public: queue ( ) ; void qput(X i); X qget ( ); } queue a; queue b;
Template: Classi template E’ possibile avere argomenti di default ad uno o più tipi generici. Es.: template class queue { X q[100]; int r,s; public: queue ( ) ; void qput(X i); X qget ( ); } queue <> a; // viene creata una coda di interi queue b;
Template: Classi template E’ possibile usare argomenti non di tipo nella specifica di template. template class queue { X q[SIZE]; int r,s; public: queue ( ) ; void qput(X i); X qget ( ); } queue a; queue b; queue c;