giovedì 27 dicembre 2012

Chiamata e superamento delle Funzioni membro classi Base

Non si viene bloccati su ogni membro funzione delle classi di base ereditati dalle classi derivate così come sono. Ma si possiede l'opzione di una personalizzazione di come vengano ereditate le funzioni membro e come esse lavorino nelle classi derivate. E' possibile superarle attraverso nuove definizioni all'interno delle classi derivate. Si può esplicitare una chiamata alla classe di base da ogni funzione membro della classe derivata.

Presentare il programma Capo superiore

Il programma Capo superiore dimostra la chiamata ed il superamento delle funzioni membro della classe di base in una classe derivata. Il programma crea un nemico che infastidisce il giocatore e lo attacca. In seguito il programma crea un Capo mediante una classe derivata. Anche il Capo infastidisce il giocatore e lo attacca, ma la cosa interessante è che il suo modo di approcciarsi ed attaccare viene modificato rispetto al Nemico (rendendolo più resistente). Questi cambiamenti sono ottenuti mediante il superamento della funzione derivata rispetto alla funzione della classe di base.
//Capo superiore
//dimostra la chiamata ed il superamento delle funzioni membro di base
#include <iostream>
using namespace std;
class Nemico
{
          public: Nemico(int danno = 5): m_Danno(danno){}
                     void Fastidio() const { cout << “Il nemico vuole combatterti.\n”; }
                     void Attacco const
                    { cout << “Attacco infligge” << m_Danno << “ punti danno.\n”;}
         private: int m_Danno;
};
class Capo: public Nemico
{
          public:
                   Capo(int danno= 20): Nemico(danno){} //chiamata al costruttore di base con argomento
                   void Fastidio() const { cout << “Il capo vuole mettere fine alla tua esistenza.\n”; }
                  void Attacco() const
                         { Nemico::Attacco();
                            cout << “Ride di te.\n”; }
};
int main()
{
   cout << “Crea un nemico.\n”;
   Nemico nemico1;
   nemico1.Fastidio();
   nemico1.Attacco();

   cout << “\n Crea un capo. \n”;
   Capo capo1;
   capo1.Fastidio();
   capo1.Attacco();

return 0;
}

Nessun commento:

Posta un commento