Progetto CQuadrilatero


Progettare una gerarchia di classi che realizzi il tipo di dato astratto "quadrilatero". Il progetto si deve articolare su due file: "IQuadrilatero.h" e "CQuadrilatero.cpp".
Il file "IQuadrilatero.h" deve contenere esattamente le seguenti istruzioni:

#ifndef IQUADRILATERO_H
#define IQUADRILATERO_H

class IQuadrilatero // Interfaccia
  {
 public:
  virtual const char *nome() const = 0;
  virtual double perimetro() const = 0;
  virtual double area() const = 0;
  };

class Punto
  {
 public:
  double m_x,m_y;
  inline Punto(double x = 0.0,double y = 0.0)
    : m_x(x), m_y(y) { }
  };

IQuadrilatero *CreaQuadrilatero(const Punto &pt1,const Punto &pt2,const Punto &pt3,const Punto &pt4);
IQuadrilatero *CreaQuadrilatero(const Punto pt[4]);

#endif

La classe IQuadrilatero è la radice della gerarchia di classi che corrispondono alle varie specializzazioni di quadrilatero; inoltre, IQuadrilatero dichiara l'interfaccia che permette di accedere ai 3 metodi sopra elencati:
- il metodo nome restituisce il nome del tipo di quadrilatero; i possibili valori restituiti da nome sono: "quadrilatero", "trapezio", "trapezio isoscele", "trapezio rettangolo", "parallelogrammo", "rombo", "rettangolo", "quadrato";
- i metodi perimetro e area, restituiscono rispettivamente il perimetro e l'area del quadrilatero, calcolati nel modo più efficiente, a seconda del tipo di quadrilatero.
La classe Punto realizza un punto su un piano, descritto dalle coordinate cartesiane x e y; per semplicità, è possibile accedere direttamente agli attributi membro.
Le due funzioni globali CreaQuadrilatero accettano come argomenti le coordinate dei quattro vertici di un quadrilatero elencate in senso orario. In base ai valori di tali coordinate, le funzioni devono:
- determinare la sottoclasse specifica di quadrilatero,
- allocare dinamicamente e inizializzare un nuovo oggetto appartenente a tale sottoclasse e
- restituire l'indirizzo dell'oggetto creato.
Ad esempio, in seguito all'invocazione CreaQuadrilatero(Punto(0,0),Punto(0,1),Punto(1,1),Punto(1,0)), la funzione deve determinare che il quadrilatero è un quadrato e, quindi, allocare e inizializzare un nuovo oggetto di classe CQuadrato.

Il file "CQuadrilatero.cpp" deve contenere la realizzazione delle due funzioni globali CreaQuadrilatero e di tutte le sottoclassi concrete della gerarchia suddetta: CQuadrilatero, CTrapezio, CTrapezioIsoscele, CTrapezioRettangolo, CParallelogrammo, CRombo, CRettangolo e CQuadrato.

Prima di effettuare la correzione del file "CQuadrilatero.cpp", verrà generato un eseguibile che dovrà superare un test automatico di conformità alle specifiche di progetto; le applicazioni che non supereranno il test, non verranno prese in considerazione.
In fase di correzione, sarà valutata negativamente ogni inutile duplicazione del codice.


Il file da inviare (mediante modulo web) è il seguente:

Attenzione - Il file inviato DEVE contenere: cognome, nome e numero di matricola del mittente

Per motivi organizzativi, si prega di NON inviare file compressi (.zip, .tar, .rar, ...)

Scadenza: ore 24:00 di martedì 1 gennaio 2002.