// in C++, an abstract class below is used to represent an interface
// the implementation class is different

#include<iostream>
using std::cout;
class Channel {

  public:
  	virtual void send(int data) = 0;
  	virtual int receive () = 0;
};

class BufferedChannel: public Channel {
  int buffer[1];
  public:
  	BufferedChannel () { };
  	virtual void send(int data);
  	virtual int receive ();
};

void BufferedChannel::send (int data) {buffer[0]=data;}
int BufferedChannel::receive () {return buffer[0];}



main () {

Channel *c = new BufferedChannel();

   c->send(10);
   c->send(20);
   cout << c->receive() << "\n";

}
