5. Classi e Funzioni Virtuali



5.3 Classi Astratte

Prima di definire la nozione di classe astratta, occorre dare la seguente definizione.
Si dice Funzione Virtuale Pura una funzione virtuale il cui prototipo è assegnato a zero. Ad esempio:

virtual void Caratteristiche()=0;
Più in generale, la sintassi di una funzione virtuale pura è la seguente:
virtual tipo nomefunzione(lista parametri)=0;
e ha l'unico scopo di avvisare il compilatore che non si intende definire le funzioni virtuali.
Una Classe Astratta è una classe in cui è definita una o più funzioni virtuali pure. Per essa non è possibile istanziare alcun oggetto, ma è possibile solo derivare altre classi, che ovviamente saranno forzate ad avere le funzioni membro della classe astratta, che ora dovranno essere opportunamente definite.
Lo scopo dell'introduzione delle classi astratte è quello di fornire una interfaccia di tipo generico, senza dettagliare l'implementazione di alcuni metodi, aumentando così l'ordine fra le classi e consentendo la definizione di una gerarchia di entità.
Ovviamente una classe astratta può anche possedere funzioni e dati membro completamente definiti.
E' lecito creare un puntatore ad una classe astratta.
Si consideri il seguente esempio:
class Figura
{
  public:
  virtual void Disegna()=0;       //Ogni figura può essere disegnata
  virtual void Cancella()=0;      //Ogni figura può essere cancellata
};

class Punto:public Figura
{
  public:
    Punto(x,y);
  private:
    int x,y;       //Coordinate del punto
};

void Punto::Disegna()
{
 . . . . 
}

void Punto::Cancella()
{
 . . . . 
}

class Rettangolo:public Figura
{
  public:
    Rettangolo(x1,y1,x2,y2);
  private:
    int x1,y1;       //Coordinate del vertice sup. sx
    int x2,y2;       //Coordinate del vertice inf. dx
};

void Rettangolo::Disegna()
{
 . . . . 
}

void Rettangolo::Cancella()
{
 . . . . 
}
Si noti come, mediante l'uso della classe Base Astratta "Figura", sia possibile organizzare gerarchicamente i concetti di Punto e Rettangolo.
dx
Precedente
back
Home page
dx
Successivo