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