Before:

class course
{
   public:
   virtual void print(){ cout << name << " (" << courseNumber << ") "; }
   string getType() { return "course"; }

   protected:
      string name;
      int courseNumber;
};

class lab: public course
{
   public:
   virtual void print(){ cout << name << " has lab fee $ " << labFee; }
   string getType() { return "lab"; }

   private:
      double labFee;
};

class grad: public course
{
   public:
   virtual void print(){ cout << name << " has graduate tuition $ " << tuition; }
   string getType() { return "grad"; }

   private:
      double tuition;
};

int main()
{
   course * schedule[4];
   schedule[0] = new course;
   schedule[1] = new lab;
   schedule[2] = new grad;
   schedule[3] = new course;

   for( int index = 0; index < 4; index++ )
   {
      if( schedule[index]->getType() == "course" )
         ((course *) schedule[index])->print();
      else if( schedule[index]->getType() == "lab" )
         ((lab *) schedule[index])->print();
      else if( schedule[index]->getType() == "grad" )
         ((grad *) schedule[index])->print();
   }
}