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