#include <iostream.h>
#include <string>

class Persona {
public: 
  Persona(string s):nome(s) {  }
     virtual void print() { cout << "Il mio nome e' " << nome << endl; }
protected:
  string nome;
};

class Studente : public Persona {
public: 
  Studente(string s, float g) : Persona(s),media(g) { }
  void print() { cout << "Il mio nome e' " << nome
     << " e la mia media e' " << media << endl; }
private:
  float media;
};

class Professore : public Persona {
public: 
  Professore(string s, int n) : Persona(s), pubblicazioni(n) { }
  void print() { cout << "Il mio nome e' " << nome
     << " ed ho  " << pubblicazioni << " pubblicazioni" << endl; }
private:
  int pubblicazioni;
};

int main()
{
  Persona* p;
  Persona x(string("Giuseppe"));
  p = &x;
  p->print();
  x.print();
  Studente y(string("Giovanni"), 21.);
  p = &y;
  p->print();
  y.print();
  Professore z(string("Antonio"), 7);
  p = &z;
  p->print();  
  z.print();
  return 0;
}
