Esempio di classe

  • 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;
    }

© Ing. Stefano Salvi - All rights reserved