mercoledì 2 gennaio 2013

Usare classi astratte

A volte si vorrebbero definire delle classi che agiscano come base per altre classi, ma non ha senso istanziare oggetti da questa classe in quanto troppo generica. Per esempio, si supponga di avere un gioco nel quale un gruppo di creature si aggirano per l'area. Nonostante via sia un'ampia varietà di creature, esse hanno due cose in comune: Possiedono un valore di salute e possono offrire un saluto. Così possiamo definire una classe, Creatura, come base per derivare altre classi, ad esempio Fatina, Drago, Troll e così via. Nonostante Creatura ci aiuta, non ha senso istanziare un oggetto Creatura. Ma ha più senso se Creatura sia indicata solo come classe di base e non per istanziare oggetti. Bene in C++ è possibile definire questo tipo di classi, sono chiamate classi astratte.

Presentare il programma Creatura astratta

Il programma Creatura astratta dimostra le classi astratte. Nel programma viene definita una classe astratta, Creatura, la quale può essere usata come classe di base per uno specifico di classi creatura. Ne viene definita uno, Troll. Quando viene istanziato l'oggetto Troll e vi è una funzione che ottiene il saluto scorbutico del troll, inoltre un'altra funzione ne mostra la salute.
//Creatura astratta
//Dimostra le classi astratte
#include<iostream>
using namespace std;
class Creatura
{ public: Creatura(int salute = 100): m_Salute(salute){}
             virtual void Saluto() const =0 // funzione virtuale pura
             virtual void MostraSalute() const { cout << “Salute: ” << m_Salute << endl; }
  protected: int m_Salute;
};
class Troll: public Creatura
{
  public: Troll(int salute = 150): Creatura(salute){}
             virtual void Saluto() const
             { cout << “Il Troll sbruffa un ciao.\n”; }
};
int main()
{
     Creatura* pCreatura = new Troll();
     pCreatura - > Saluto();
     pCreatura - > MostraSalute();

  return 0;
}

Nessun commento:

Posta un commento