Employee Header

#ifndef EMPLOY_H
#define EMPLOY_H
#include < iostream.h>
#ifndef RCPOINTE_H
#include "rcpointe.h"
#endif

#ifndef DARRAY_H
#include "darray.h"
#endif

#include < Windows.hpp >
class Employee 
{
public:
    enum {HOURLY, FLATRATE};
    // There is no object of type Employee, so the funtions are dummies
    virtual void write (ostream&)=0;
    virtual void read(istream&)=0;
    virtual void print(ostream&)=0;
    virtual void printWage(ostream&)=0;
    virtual void setHours(int)=0;
    virtual int typeEmployee()const=0;
    virtual String firstName()const=0;
    virtual String lastName()const=0;
    virtual String hours()=0;
};

typedef RcPointer< Employee> EmployeePtr;

class HourlyEmployee :public Employee
{
public:
    HourlyEmployee();
    HourlyEmployee(const String &,const String &,int);
    virtual void write (ostream&);
    virtual void read(istream&);
    virtual void print(ostream&);  
    virtual void printWage(ostream&);
    virtual void setHours(int);
    virtual int typeEmployee()const;
    virtual String firstName()const{return _firstName;}
    virtual String lastName()const{return _lastName;}
    virtual String hours(){return String(_hours);}
private:
    String _lastName;
    String _firstName;
    int _hours;
};

class FlatRateEmployee :public Employee
{
public:
    FlatRateEmployee();
    FlatRateEmployee(const String &,const String &);
    virtual void write (ostream&);
    virtual void read(istream&);
    virtual void print(ostream&);        
    virtual void printWage(ostream&);
    virtual void setHours(int);
    virtual int typeEmployee()const;   
    virtual String firstName()const{return _firstName;}
    virtual String lastName()const{return _lastName;}
    virtual String hours(){throw "hours function does not apply to flat-rate employee";}
private:
    String _lastName;
    String _firstName;
};

typedef Array< EmployeePtr> EmployeeArray;

#endif