C++ – Utilizzo delle classi template

Scritto da Gianjey | 17 ottobre, 2010 17:51

cplusplus

Se si utilizza la nuova c_libreria4 le modifiche da apportare al programma di gestione prestiti sono molto limitate:

Oltre all’inclusione del template (1), l’uso della classe modello richiede il tipo da specificare nel segnaposto (2). Nel caso in esame la libreria gestirà oggetti di tipo libSocio.

L’unica differenza fra le 2 e la 3 è relativa all’ambito di visibilità: nelle 2 si è nello spazio biblioteca che contiene anche la definizione di libSocio, cosa non vera per la 3. È quindi necessario specificare l’operatore di visibilità e lo spazio dei nomi in cui libSocio è definito.

Come sicuramente si sarà notato l’inclusione, in molti esempi, della vector, ha permesso di utilizzare la struttura vettore. Ogni volta, specificando il tipo nel segnaposto, si è gestito un vettore di stringhe, di libri ecc… In definitiva, come ora dovrebbe essere stato chiarito, si tratta della definizione di una classe template.

#include <iostream>
#include <string>
using namespace std;

#include "c_libsocio"
#include "c_libreria4"	/*1*/

namespace biblioteca{
  libreria<libSocio> insertLibri();	/*2*/
  void prestito(libreria<libSocio>&);	/*2*/
  void restituzione(libreria<libSocio>&);	/*2*/
  void info(libreria<libSocio>);	/*2*/
}   

int main()
{
  biblioteca::libreria<biblioteca::libSocio> biblio; 	/*3*/
...
}

Se la biblioteca volesse gestire, utilizzando le stesse funzionalità, le riviste, basterebbe aggiungere la definizione della nuova classe e utilizzare il template in modo corretto:

#include <iostream>
#include <string>
using namespace std;

#include "c_libsocio"
#include “c_rivista”	/*1*/
#include "c_libreria4"
...
int main()
{
  biblioteca::libreria<biblioteca::libSocio> lib1;	/*2*/
  biblioteca::libreria<biblioteca::rivista>  lib2;	/*3*/
...
}

Ammesso che il file c_rivista contenga la definizione della nuova classe, la 1 permette l’uso della classe.

Nella 2 si definisce un oggetto lib1 che è una libreria di oggetti di tipo libSocio, laddove nella 3, invece, gli oggetti sono di tipo rivista. Per il resto i metodi definiti in libreria si applicheranno agli oggetti di un tipo o a quelli di un altro, a seconda se si invierà il messaggio a lib1 o a lib2.

 Indice corso: C++ Appunti di Programmazione Fonte: prof. Nunzio Brugaletta 

Lascia un Commento