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