venerdì 8 agosto 2014

Prove sull'overriding delle proprietà protected.

Bene.
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 derivata


Proprietà 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 derivata


Leggiamole 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 genitrice


Chiamandole 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