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