#include<iostream>

using namespace std;

class I {
public:
// virtual void play() const = 0; // pure virtual
                 // Makes the class to be abstract:
                 // see later
 virtual void play() const
//   void play() const
   {  cout << "I::play" << endl; }
};

class W : public I {
public:
   void play() const
   {  cout << "W::play" << endl; }
};

int main()
{
   I instr;
   instr.play();

   W flute;
   flute.play();

   instr = flute;
// flute = instr; // error

   I* pflute = &instr;
   pflute->play();

   pflute = &flute;
   pflute->play();

   return 0;
}
