venerdì 28 dicembre 2012

Presentare il Polimorfismo

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