Here's my code, which is working since I removed "override" from the construtor and I'm intrigued to know whether there's anything wrong with doing this.
(I know it's not a great program, it's just a simple little one for me whilst I try to get my head around this)
Main program:
program employeemanager;
{$mode objfpc}{$H+}
uses
{$IFDEF UNIX}{$IFDEF UseCThreads}
cthreads,
{$ENDIF}{$ENDIF}
Classes, employee, parttime
{ you can add units after this };
var
choice:char;
procedure addfull;
var
id:integer;
name,date,title:string;
added:temployee;
begin
writeln('Enter employee ID');
readln(ID);
writeln('Enter employee name');
readln(name);
writeln('Enter their DOB');
readln(date);
writeln('Enter their job title');
readln(title);
added:=temployee.create(ID, name, date, title);
writeln('Here is what you added: ');
added.viewdetails;
readln;
end;
procedure addpart;
var
id,hours:integer;
name,date,title:string;
added:ptemployee;
begin
writeln('Enter employee ID');
readln(ID);
writeln('Enter employee name');
readln(name);
writeln('Enter their DOB');
readln(date);
writeln('Enter their job title');
readln(title);
writeln('How many hours do they work per week?');
readln(hours);
added:=ptemployee.create(ID, hours, name, date, title);
writeln('Here is what you added: ');
added.viewdetails;
readln;
end;
begin
writeln('which would you like to add?');
writeln('P. part-time employee');
writeln('F. full-time employee');
readln(choice);
case choice of
'P': addpart;
'F': addfull;
end;
end.
Employee unit:
unit employee;
{$mode objfpc}{$H+}
interface
uses
Classes, SysUtils;
type
Temployee=class
protected
employeeID:integer;
employeename:string;
dateofbirth:string;
jobtitle:string;
public
constructor create(i:integer;n,d,t:string); virtual;
function getemployeeID:integer;
function getemployeename:string;
function getdateofbirth:string;
function getjobtitle:string;
procedure setemployeename(n:string);
procedure setjobtitle(t:string);
procedure viewdetails; virtual;
end;
implementation
constructor TEmployee.create(i:integer;n,d,t:string);
begin
employeeID:=i;
employeename:=n;
dateofbirth:=d;
jobtitle:=t;
end;
function TEmployee.getemployeeID:integer;
begin
getemployeeID:=employeeID;
end;
function TEmployee.getemployeename:string;
begin
getemployeename:=employeename;
end;
function TEmployee.getdateofbirth:string;
begin
getdateofbirth:=dateofbirth;
end;
function TEmployee.getjobtitle:string;
begin
getjobtitle:=jobtitle;
end;
procedure TEmployee.setemployeename(n:string);
begin
employeename:=n;
end;
procedure TEmployee.setjobtitle(t:string);
begin
jobtitle:=t;
end;
procedure TEmployee.viewdetails;
begin
writeln('Employee ID: ',employeeID);
writeln('Employee name: ',employeename);
writeln('Employee date of birth: ',dateofbirth);
writeln('Employee job title: ',jobtitle);
end;
end.
Part-time employee unit (sub-class):
unit parttime;
{$mode objfpc}{$H+}
interface
uses
Classes, SysUtils, employee;
type ptemployee = class(temployee)
private
hoursworked:integer;
public
constructor create(i,h:integer; n,d,t:string);
procedure viewdetails; override;
end;
implementation
constructor ptemployee.create(i,h:integer; n,d,t:string);
begin
employeeID:=i;
hoursworked:=h;
employeename:=n;
dateofbirth:=d;
jobtitle:=t;
end;
procedure ptemployee.viewdetails;
begin
writeln('Employee ID: ',employeeID);
writeln('Employee name: ',employeename);
writeln('Employee date of birth: ',dateofbirth);
writeln('Employee job title: ',jobtitle);
writeln('Hours worked per week: ',hoursworked);
end;
end.