| prof. Nunzio Brugaletta |
C++:
programmazione e oggetti |
Se si utilizza la nuova c_libreria4 le modifiche da apportare al programma di gestione prestiti sono molto limitate:
#include <iostream>
#include <string>
using namespace std;
#include "c_libsocio"
#include "c_libreria4" /*1*/
namespace biblioteca{
void insertLibri(libreria<libSocio>&); /*2*/
void prestito(libreria<libSocio>&); /*2*/
void restituzione(libreria<libSocio>&); /*2*/
void info(libreria<libSocio>); /*2*/
}
main(){
biblioteca::libreria<biblioteca::libSocio> biblio; /*3*/
...
}
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.
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"
...
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.
| http://ennebi.solira.org |
ennebi@solira.org |