- Definiamo ora una classe derivata slist, lista di stringhe. Prima l'header file:
// Classe slist : slist.h
#ifndef SLIST_H
#define SLIST_H
#ifndef LIST_H // Se non è già stata definita la classe padre
#include "lista.h" // carico ora la definizione
#endif
struct slist : public lista {
char *str; // Il dato particolare
slist () { str = (char *) 0; }; // Costruttore inline di default
slist (slist *n, char *s); // Costruttore con parametri
virtual int compare (const void *el); // Definizione locale di 'compare'
virtual ~slist (); // Distruttore
};
#endif
- Quindi il file con le definizioni dei metodi ed un piccolo 'main'
// Classe slist : slist.cc
#include <stdio.h>
#include <string.h>
#include "slist.h" // include anche list.h
slist::slist (slist *n, char *s) : lista ((lista*) n)
{
str = new char [strlen (s) + 1]; // Spazio per una nuova stringa
if (str) // Se me lo ha dato
strcpy (str,s); // Ci copio la stringa
}
int slist::compare (const void *el)
{
return strcmp (str,(char *) el); // Semprice confronto di stringhe
}
slist::~slist ()
{
if (str) // Se la stringa esiste
delete str; // La elimino
}
// Elenco di stringhe da inserire nella lista
char *strs [] = { "uno", "due", "tre" , ""};
int main ()
{
struct slist *l = (struct slist *)0; // Puntatore all'inizio lista
for (int i = 0; strs [i][0]; i ++) // Per ogni stringa dell'elenco
l = new slist (l,strs [i]); // Creo un nodo della lista, all'inizio della lista
printf ("%s\n", ((slist*)(l -> Search ("due"))) -> str); // Ricerco la chiave 'due' e la strampo
return 0;
}
|