[c++] Ereditarietà C++

di il
4 risposte

[c++] Ereditarietà C++

Ciao ,

Da qualche giorno sto studiando il C++.
Vorrei creare una classe base dalla quale ereditare i membri PROTECTED ed aggiungerne altri
nella classe derivata, quindi accedere a tutti i membri della nuova classe estesa
La classe base si chiama NPC , quella derivata si chiama Warrior
Se non erro posso derivare una classe con l'accesso public in questo modo:

CLASSE BASE
class npc
{
	int Hp;
	public:
		npc();
		~npc();
	protected: // Protected quindi solo visibile dalla classe derivata
		void cammina();
		void corri();
		void Destra();
		void Sinistra();
		void Avanti();
		void Indietro();
		void Salta();
		void fermati();
		
		void setHp( int value){ Hp = value;} 
		int getHp(){ return Hp;} 
};


CLASSE DERIVATA
class warrior : public npc
{
	public:
		warrior();
		~warrior();
	
		void skill1();
		void skill2();
		void skill3();
	
};

MAIN
#include <iostream>
#include "warrior.h"

/* run this program using the console pauser or add your own getch, system("pause") or input loop */

int main(int argc, char** argv) {
	
	
	npc Npc;
	warrior wp;
		
	wp.     <---- qui vorrei richiamare anche i membri di npc , ma non funziona
        Npc.    <---- giustamente sono visibili solo il costruttore e il distruttore in quanto ho inserito il modificatore protected, ma non importa io voglio accedere a tutto da warrior ( estendere la classe) e proteggere i membri di npc da accessi diretti
        
	return 0;
}
non funziona perchè non ho capito bene, potete dirmi dove ho sbagliato ?
Grazie mille

4 Risposte

  • Re: [c++] Ereditarietà C++

    Non funziona in che senso?
    Comunque per richiamare i membri protetti della classe Hp devi prevedere delle funzioni di inoltro (pubbliche) in Warrior che richiamino le funzioni protette di Hp (e se ce ne sono) di Warrior.
  • Re: [c++] Ereditarietà C++

    Ciao ,

    Non funziona nel senso che mi da questo errore
    
    11	8	C:\Dev-Cpp\Progetti\npc.h	[Error] 'void npc::cammina()' is protected
    
    quando nel main scrivo questo
    
    int main(int argc, char** argv) {
    	
    	
    	npc Npc;
    	warrior wp;
    		
    	wp.cammina(); //<------------ Errore
    		
    
    	return 0;
    }
    
    Vorrei poter avere una classe nuova ( Warrior) che eredita i membri di quella base (npc) ed in più
    utilizzi i membri nuovi di Warrior
    Comunque per richiamare i membri protetti della classe Hp devi prevedere delle funzioni di inoltro (pubbliche) in Warrior che richiamino le funzioni protette di Hp (e se ce ne sono) di Warrior.
    forse ti riferisci alla classe base npc e non Hp ( int Hp ). Ora provo ma non ho capito come si fa
  • Re: [c++] Ereditarietà C++

    Semplicemente:
    
    class warrior : public npc
    {
       public:
          warrior();
          ~warrior();
       
          void skill1();
          void skill2();
          void skill3();
          void FattiUnaCamminata() { cammina(); }  
    };
    ...
      npc Npc;
       warrior wp;
          
       wp.FattiUnaCamminata(); 
    
    ...
    
  • Re: [c++] Ereditarietà C++

    Grazie funziona !
Devi accedere o registrarti per scrivere nel forum
4 risposte