// 1.2: Puntatori a oggetti
#include <iostream>
using namespace std;
// Superclasse
class Superclass {
private:
int dato;
};
class Figlio : public Superclass {
private:
int datofiglio;
};
class Nipote : public Figlio {
private:
int datonipote;
};
class FiglioPRIV : private Superclass {
private:
int datofiglio;
};
int main() {
Superclass s;
Figlio f;
Nipote n;
FiglioPRIV fp;
Superclass *ps;
Figlio *pf;
Nipote *pn;
ps = &s;
ps = &f;
ps = &n;
//ps = &fp; // ERRORE: FiglioPRIV e' una derivata private di Superclass
Superclass &rs1 = s;
Superclass &rs2 = f;
Superclass &rs3 = n;
//Superclass &rs4 = fp; // ERRORE
//pf = &s; // ERRORE: Figlio non e' una superclasse di Superclass
pf = &f;
pf = &n;
//pf = &fp; // ERRORE: Figlio non e' una superclasse di FiglioPRIV
Figlio &rf1 = f;
Figlio &rf2 = n;
//Figlio &rf3 = s; // ERRORE
//Figlio &rf4 = fp; // ERRORE
pn = &n;
//pn = &s; // ERRORE: Nipote non e' una superclasse di Superclass
//pn = &f; // ERRORE: Nipote non e' una superclasse di Figlio
Nipote &rn1 = n;
//Nipote &rn2 = s; // ERRORE
//Nipote &rn3 = f; // ERRORE
}