Uno dei pilastri
della OOP è il polimorfismo,
con il quale le funzioni membro producono risultati differenti a
seconda del tipo di oggetto nel quale sono stati chiamate in causa.
Per esempio, un gruppo di nemici che il giocatore sta affrontando, il
gruppo è formato da oggetti di tipo diverso imparentati tra loro
dall'ereditarietà, i nemici ed i loro capi. Attraverso la magia del
polimorfismo, si possono richiamare le stesse funzioni membro per
ogni cattivo del gruppo, definire come attaccare il giocatore, e per
ogni oggetto valutarne gli effetti. Una chiamata all'oggetto nemico
produce un attacco debole, mentre una chiamata al capo produce
risultati diversi, ad esempio un potente attacco. Questo può
assomigliare al superamento, ma il polimorfismo è diverso, in quanto
le chiamate delle funzioni sono dinamiche e gli effetti valutati in
tempo reale, a seconda del tipo di oggetto. Il modo migliore per
comprendere questo meccanismo è mostrarne esempi concreti.
Presentare il programma Capo virtuale
Il programma Capo
virtuale dimostra come si usano le funzioni membro virtuali e come
raggiungere il comportamento polimorfico. Mostra cosa accade quando
si usa un puntatore alla classe di base per chiamare funzioni
virtuali e non virtuali. Mostra anche l'uso dei distruttori verticali
che assicurano la corretta distruzione degli oggetti richiamati
tramite puntatori alla classe di base.
// Capo virtuale
//dimostra funzioni virtuali
#include<iostream>
using namespace std;
class Nemico
{public:
Nemico(int danno=10){ m_pDanno = new
int(danno); }
virtual ~Nemico(){ cout <<
“m_pDanno cancellato”; delete m_pDanno;}
void Fastidio() const
{ cout << “Il nemico vuole
combatterti.\n”; }
void virtual vFastidio() const
{ cout << “Il nemico vuole
combatterti.\n”; }
protected: int* m_pDanno;
};
class Capo: public Nemico
{
public: Capo( int multi =2){ m_pMultiDanno
= new int(multi); }
virtual ~Capo(){ cout <<
“m_pMultiDanno cancellato”; delete m_pMultiDanno;}
void Fastidio() const
{ cout << “Il capo vuole mettere
fine alla tua esistenza.\n”; }
void virtual vFastidio() const
{ cout << “Il capo vuole mettere
fine alla tua esistenza.\n”; }
protected: int* m_pMultiDanno;
};
int main()
{ cout << “Puntatore a Nemico che
punta a oggetto Capo:\n”;
Nemico* pCattivo = new Capo();
pCattivo - > Fastidio();
pCattivo - > vFastidio();
cout << “Cancelliamo puntatore a
Nemico:\n”;
delete pCattivo;
pCattivo = 0;
return 0;
}
Nessun commento:
Posta un commento