#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;
   W flute;

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

   (*pflute).play();

// pflute->W::play();    // error
// (*pflute).W::play();  // error

   W flute2;
// flute2 = *pflute;     //error

   return 0;
}
