#include <iostream>
using namespace std;
class Premiere {
public:
  Premiere() { cout << "ctor premiere" << endl; }
  virtual ~Premiere() { cout << "dtor premiere" << endl; }
  void salut() { cout << "salut" << endl; }
  virtual void bonjour() { cout << "bonjour" << endl; }
};
class Seconde : public Premiere {
public:
  Seconde() { cout << "ctor seconde" << endl; }
  virtual ~Seconde() { cout << "dtor seconde" << endl; }
  void salut() { cout << "salutations" << endl; }
  virtual void bonjour() { cout << "bien le bonjour" << endl; }
};
int main() {
  Premiere p;
  Seconde *s = new Seconde;
  p.salut(); p.bonjour();
  (*s).salut(); (*s).bonjour();

  Seconde *ps = s;
  ps->salut(); ps->bonjour();
  Premiere *pp = ps;
  pp->salut(); pp->bonjour();
  delete s;
  return 0;
}