- Definiamo ora una classe derivata slist, lista di stringhe.
Prima l'header file:
// Classe slist : slistc.h
#ifndef SLISTC_H
#define SLISTC_H
#ifndef LISTC_H
#include "listc.h"
#endif
class slist : public list {
char *str; // Private
protected :
virtual int compare (const void *el); // Definiro' la virtuale pura
public :
slist (slist *n, char const *s); // Costruttore
~slist (); // Distruttore
char const * string () { return str; }; // Interfaccia inline
};
#endif
- Quindi il file con le definizioni dei metodi
// Classe slist : slist.cpp
#include <string.h>
#include "slistc.h" // include anche list.h
slist::slist (slist *n, char const *s) : list (n) // Chiamo il costruttore con parametri di list
{
str = new char [strlen (s) + 1]; // Alloco lo spazio per la stringa
if (str) // Se ho lo spazio
strcpy (str,s); // Ci copio dentro il valore
}
int slist::compare (const void *el)
{
return strcmp (str,(char *) el); // definizione del metodo virtuale puro del padre
}
slist::~slist ()
{
if (str) // Se ho allocato la stringa
delete str; // Libero lo spazio usato
}
- Per finire, il file con un piccolo 'main' (scaricate l'eventuale Makefile)
// Programma : main.cc
#include <stdio.h>
#include "slistc.h" // include anche list.h
/* Array degli elementi da costruire */
char *strs [] = { "uno", "due", "tre" , ""};
void main (){
struct slist *l = (struct slist *)0; // Punatatore alla base della lista
for (int i = 0; strs [i][0]; i ++) // Ciclo di creazione degli elementi
l = new slist (l,strs [i]); // Creo il singolo elemento
printf ("%s\n", ((slist *) l -> Search ("due")) -> string ()); // Ricerca
}
|