//Attributo: Attr.h
// Definizione delle classi Attributo, AttrGenere, AttrTaglia, AttrColore, AttrModello
#ifndef ATTR_H
#define ATTR_H

class Attributo {
  // Classi che posseggono attributi
  friend class Capo;
  friend class Cintura;
  friend class Vestiario;
public:
  // Tipi di attributo - definizione di tipo
  enum tipo_t { genere, taglia, colore, modello };
private:
  tipo_t tipo;      // Tipo di questo attributo
  char *valore;     // Valore dell'attributo
protected :
  int operator != (const Attributo &a);                              // Operatore di confronto
  int operator == (const Attributo &a) { return !operator != (a); }; // Operatore di confronto
  void changestr (char *s);                                          // Cambia il valore (solo per taglia)
  char * const val () { return valore; };                            // Ritorna il valore
public:
  Attributo (const tipo_t t, const char *val); // Costruttore con parametri
  Attributo (const Attributo &a);              // Costruttore per copia
  ~Attributo ();                               // Distruttore
};

class AttrGenere : public Attributo {
public:
  AttrGenere (const char *val) : Attributo (genere , val) {};
};


class AttrTaglia : public Attributo {
public:
  AttrTaglia (const int val);
};

class AttrColore : public Attributo {
public:
  AttrColore (const char *val) : Attributo (colore , val) {};
};

class AttrModello : public Attributo {
public:
  AttrModello (const char *val) : Attributo (modello , val) {};
};

#endif