Cerca nel blog

lunedì 29 settembre 2014

Ereditarietà

L ereditarietà è un concetto importante per tutti i linguaggi di programmazione orientati agli oggetti, serve per aggiornare un vecchio codice aggiungendo nuove funzionalità conservando quelle vecchie. Per effettuare l aggiornamento si usano delle regole di passaggio (o modificatori) e sono 3:
PUBLIC: con questo modificatore solo la parte pubblica e protetta verrà ereditata dalla nuova classe, gli attributi e i metodi che erano pubblici rimarrano pubblici e quelli protetti resteranno protetti.
PROTECTED: usando questo moificatore la parte pubblica e protetta verrà ereditata dalla nuova classe, ma gli attributi e i metodi diventeranno tutti protetti.
PRIVATE:usando questo modificatore la parte pubblica e privata verrà ereditata dalla nuova classe, ma i metodi e gli attributi saranno tutti privati.
Di seguito un semplice esempio di uso dell' ereditarietà:
#include <iostream.h>

class Nonna 
{
private: int n1;
protected: int n2;
public: int n3;
  Nonna() : n1(0),n2(0), n3(0) {}
  void scrivi_Nonna() const;
} ;

class Mamma : protected  Nonna
{
private: int m1;
protected: int m2;
public: int m3;
  Mamma() : m1(0),m2(0), m3(0) {}
  void scrivi_Mamma() const;
} ;

class Figlia : Mamma    // accesso private di default
{
private: int f1;
protected: int f2;
public: int f3;
  Figlia() : f1(0),f2(0), f3(0) {}
  void scrivi_Figlia() const;
};

void Nonna::scrivi_Nonna() const
{
 cout << "\nFunzione-membro scrivi_Nonna:\n";
 cout << "n1 = " << n1 << '\n';
 cout << "n2 = " << n2 << '\n';
 cout << "n3 = " << n3 << '\n';
}

void Mamma::scrivi_Mamma() const
{
 cout << "\nFunzione-membro scrivi_Mamma:\n";
// cout << "n1 = " << n1 << '\n';  // errore
 cout << "n1 e' privato: non si eredita\n";
 cout << "n2 = " << n2 << '\n';
 cout << "n3 = " << n3 << '\n';
 cout << "m1 = " << m1 << '\n';
 cout << "m2 = " << m2 << '\n';
 cout << "m3 = " << m3 << '\n';
}

void Figlia::scrivi_Figlia() const
{
 cout << "\nFunzione-membro scrivi_Figlia:\n";
// cout << "n1 = " << n1 << '\n';  // errore
 cout << "n1 e' privato: non si eredita\n";
 cout << "n2 = " << n2 << '\n';
 cout << "n3 = " << n3 << '\n';
// cout << "m1 = " << m1 << '\n';  // errore
 cout << "m1 e' privato: non si eredita\n";
 cout << "m2 = " << m2 << '\n';
 cout << "m3 = " << m3 << '\n';
 cout << "f1 = " << f1 << '\n';
 cout << "f2 = " << f2 << '\n';
 cout << "f3 = " << f3 << '\n';
}

void scrivi_Figlia(const Figlia& f)
{
 cout << "\nFunzione globale scrivi_Figlia:\n";
// cout << "n1 = " << f.n1 << '\n';  // errore
 cout << "n1 e' privato: inaccessibile\n";
// cout << "n2 = " << f.n2 << '\n';  // errore
 cout << "n2 e' protetto: inaccessibile\n";
// cout << "n3 = " << f.n3 << '\n';  // errore
 cout << "n3 e' protetto (in Mamma): inaccessibile\n";
// cout << "m1 = " << f.m1 << '\n';  // errore
 cout << "m1 e' privato: inaccessibile\n";
// cout << "m2 = " << f.m2 << '\n';  // errore
 cout << "m2 e' protetto: inaccessibile\n";
// cout << "m3 = " << f.m3 << '\n';  // errore
 cout << "m3 e' privato (in Figlia): inaccessibile\n";
// cout << "f1 = " << f.f1 << '\n';  // errore
 cout << "f1 e' privato: inaccessibile\n";
// cout << "f2 = " << f.f2 << '\n';  // errore
 cout << "f2 e' protetto: inaccessibile\n";
 cout << "f3 = " << f.f3 << '\n';
}

int main()
{
 {
  Nonna n;
  n.scrivi_Nonna();
 }
 {
  Mamma m;
  m.scrivi_Mamma();
 }
 cout << "\nPremi return per visualizzare il secondo blocco ";
 char c;
 cin.get(c);
 Figlia f;
 f.scrivi_Figlia();
 scrivi_Figlia(f);
 return 0; 
}

Nessun commento:

Posta un commento