90 likes | 280 Views
Fondamenti di Informatica 2 Ingegneria Informatica Docente: Giovanni Macchia a.a. 2002-2003. Template. Una delle problematiche più attuali del software è il riutilizzo del codice in altri contesti.
E N D
Fondamenti di Informatica 2Ingegneria InformaticaDocente: Giovanni Macchiaa.a. 2002-2003
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 funzionitemplate. Una funzione template prende la forma generale con la parola chiave template: template <class Tipo1, class Tipo2, ..> 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 <class X> 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 Tipo1, class Tipo2, ..> 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 <Tipo1, Tipo2...> nome_oggetto; Es.: template <class X> class queue { X q[100]; int r,s; public: queue ( ) ; void qput(X i); X qget ( ); } queue <int> a; queue <char> b;
Template: Classi template E’ possibile avere argomenti di default ad uno o più tipi generici. Es.: template <class X=int> 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 <char> b;
Template: Classi template E’ possibile usare argomenti non di tipo nella specifica di template. template <class X, int SIZE=20> class queue { X q[SIZE]; int r,s; public: queue ( ) ; void qput(X i); X qget ( ); } queue <int,10> a; queue <char,100> b; queue<float> c;