// ABSTRACT CLASS - any class with a pure virtual function, may not be defined directly

#include <iostream>

using namespace std;

class Base
{
  public:
    virtual void print() = 0; // pure virtual function, must be defined in subclasses
};

class New1: public Base
{
  public:
    void print() { cout << "New1" << endl; }
};

class New2: public Base
{
  public:
    void print() { cout << "New2" << endl; }
};

int main()
{
  Base * ptr;

  // Illegal call - generates compile error
  // Base base;

  New1 new1;
  New2 new2;

  ptr = & new1;
  ptr->print();

  ptr = & new2;
  ptr->print();

  return 0;
}

// OUTPUT:
// New1
// New2

// EOF