Adesso, invece del public mettiamoci il protected: credo che sia esattamente la stessa cosa del public, visto che una proprietà protected è visibile dalla classe derivata.
Ricominciamo:
Proprietà protected overridata:
#include "iostream" using namespace std; class Genitrice{ protected: char * proprieta; public: Genitrice(){ proprieta="sono la proprieta' della genitrice"; } void metodo(){ cout << proprieta << endl; getchar(); } }; class Derivata:public Genitrice{ protected: char * proprieta; public: Derivata():Genitrice(){ proprieta="sono la proprieta' della derivata"; } void metodo(){ cout << proprieta << endl; getchar(); } }; void main(){ Genitrice gen; Derivata der; gen.metodo(); der.metodo(); }
sono la proprieta' della genitrice sono la proprieta' della derivataProprietà protected overridata letta con un metodo della classe genitrice e uno diverso della classe derivata:
#include "iostream" using namespace std; class Genitrice{ protected: char * proprieta; public: Genitrice(){ proprieta="sono la proprieta' della genitrice"; } void metodoGen(){ cout << proprieta << endl; getchar(); } }; class Derivata:public Genitrice{ protected: char * proprieta; public: Derivata():Genitrice(){ proprieta="sono la proprieta' della derivata"; } void metodoDer(){ cout << proprieta << endl; getchar(); } }; void main(){ Genitrice gen; Derivata der; gen.metodoGen(); der.metodoDer(); }
sono la proprieta' della genitrice sono la proprieta' della derivataLeggiamole usando metodoGen ereditato dalla classe derivata, e il risultato dovrebbe essere lo stesso:
void main(){ Genitrice gen; Derivata der; der.metodoGen(); der.metodoDer(); }infatti...
sono la proprieta' della genitrice sono la proprieta' della derivata
Togliamo la proprietà dalla classe derivata:
#include "iostream" using namespace std; class Genitrice{ protected: char * proprieta; public: Genitrice(){ proprieta="sono la proprieta' della genitrice"; } void metodoGen(){ cout << proprieta << endl; getchar(); } }; class Derivata:public Genitrice{ public: Derivata():Genitrice(){ } void metodoDer(){ cout << proprieta << endl; getchar(); } }; void main(){ Genitrice gen; Derivata der; gen.metodoGen(); der.metodoGen(); der.metodoDer(); }
sono la proprieta' della genitrice sono la proprieta' della genitrice sono la proprieta' della genitriceChiamandole direttamente:
void main(){ Genitrice gen; Derivata der; cout << gen.proprieta << endl; cout << der.proprieta << endl; getchar(); }
1>c:\users\antonello\documents\visual studio 2010\projects\test1\test1\foglio.cpp(38): error C2248: 'Genitrice::proprieta': impossibile accedere a protected membro dichiarato nella classe 'Genitrice'Ecco: la differenza è solo che la proprietà protected non può essere chiamata dall'esterno della classe derivata in quanto si comporta come una proprietà privata quando chiamata dall'esterno.
Nessun commento:
Posta un commento