Cerca nel sito:
ricerca
avanzata

Frasi Celebri...

Ad ogni periodo di attivit? deve seguirne uno di riposo.

Mao Tse-tung 

Sondaggio:

Come va la vita con l'Euro?

Ottimo!
Come prima
Fatico ma imparer?
Porc... che macello!

visualizza risultati


 

Classi astratte

 

Il meccanismo dell'ereditarieta` e quello del polimorfismo possono essere combinati per realizzare delle classi il cui unico scopo e` quello di stabilire una interfaccia comune a tutta una gerarchia di classi:


  class TShape {
    public:
      virtual void Paint() = 0;
      virtual void Erase() = 0;
      /* ... */
  };


Notate l'assegnamento effettuato alle funzioni virtuali, funzioni di questo tipo vengono dette funzioni virtuali pure e l'assegnamento ha il compito di informare il compilatore che non intendiamo definire i metodi virtuali. Una classe che possiede funzioni virtuali pure e detta classe astratta e non e` possibile istanziarla; essa puo` essere utilizzata unicamente per derivare nuove classi forzandole a fornire determinati metodi (quelli corrispondenti alle funzioni virtuali pure). Il compito di una classe astratta e` quella di fornire una interfaccia senza esporre dettagli implementativi. Se una classe derivata da una classe astratta non implementa una qualche funzione virtuale pura, diviene essa stessa una classe astratta.
Le classi astratte possono comunque possedere anche attributi e metodi completamente definiti (costruttori e distruttore compresi) ma non possono comunque essere istanziate, servono solo per consentire la costruzione di una gerarchia di classi che rispetti una certa interfaccia:


  class TShape {
    public:
      virtual void Paint() = 0; // ogni figura puo` essere
      virtual void Erase() = 0; // disegnata e cancellata!
  };

  class TPoint : public TShape {
    public:
      TPoint(int x, int y) : X(x), Y(y) {}

    private:
      int X, Y;                 // coordinate del punto
  };

  void TPoint::Paint() {
    /* ... */
  }

  void TPoint::Erase() {
    /* ... */
  }


Non e` possibile creare istanze della classe TShape, ma la classe TPoint ridefinisce tutte le funzioni virtuali pure e puo` essere istanziata e utilizzata dal programma; la classe TShape e` comunque ancora utile al programma, perche` possiamo dichiarare puntatori di tale tipo per gestire una lista di oggetti polimorfi che possiamo utilizzare senza preoccuparci del fatto che possano essere punti, triangoli o quant'altro.

 
successivo
–«  INDICE  »–

 

 

 

 
Powered by paper&pencil (carta&matita ) - Copyright © 2001-2022 Cataldo Sasso