martedì 5 agosto 2014

Accesso a membri privati della classe genitrice da metodi della classe genitrice ma non della classe derivata.

Scopro un'altra cosa che non mi era mai venuta in mente.
Una classe derivata non può accedere con metodi suoi ai membri privati della classe genitrice.
Con metodi ereditati, invece, vi può accedere!

Ecco:
#include "iostream"
using namespace std;


class Genitrice{
 char * privata;
public:
 Genitrice(){
  privata="sono privata";
 }
 void metodo(){
  cout << privata << endl;
  getchar();
 }
};

class Derivata:public Genitrice{
public:
 Derivata():Genitrice(){}

};




void main(){
 Genitrice gnt;
 gnt.metodo();
 Derivata drv;
 drv.metodo();
}
Ecco:
sono privata

sono privata


Invocando nella classe derivata il metodo ereditato dalla classe genitrice, esso vede il membro privato della classe genitrice.
Adesso overriddo il metodo:
#include "iostream"
using namespace std;


class Genitrice{
 char * privata;
public:
 Genitrice(){
  privata="sono privata";
 }
 void metodo(){
  cout << privata << endl;
  getchar();
 }
};

class Derivata:public Genitrice{
public:
 Derivata():Genitrice(){}
 void metodo(){
  cout << privata << endl;
  getchar();
 }

};




void main(){
 Genitrice gnt;
 gnt.metodo();
 Derivata drv;
 drv.metodo();
}
Ecco, adesso la classe derivata overridda il metodo, ripetendolo esattamente uguale, ma appartenente ad essa, non alla classe genitrice.
1>c:\users\antonello\documents\visual studio 2010\projects\test1\test1\foglio.cpp(21): error C2248: 'Genitrice::privata': impossibile accedere a private membro dichiarato nella classe 'Genitrice'
Ecco, come volevasi dimostrare!

Nessun commento:

Posta un commento