#include 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; }