// Lib13.cpp : 定义控制台应用程序的入口点。
//
#include "stdafx.h"
#include
#include
#include
using namespace std;
class employee
{
protected:
int number;
char*name;
double sumPay;
static int employeeNo;
public:
employee();
~employee();
virtual void pay()=0;
virtual void displayStatus();
};
class technician:public employee
{
protected:
float hourlyRate;
int workHours;
public:
technician();
void pay();
void displayStatus();
};
class salesman:virtual public employee
{
protected:
double CommRate;
double sales;
public:
salesman();
void pay();
void displayStatus();
};
class manager:virtual public employee
{
protected:
float monthlyPay;
public:
manager();
void pay();
void displayStatus();
};
class salesmanager:virtual public employee
{
public:
salesmanager();
void pay();
void displayStatus();
};
int employee::employeeNo=1000;
employee::employee()
{
char str[20];cout<
cin>>str;
name=new char[strlen(str)+1];
strcpy(name,str);
number=employeeNo++;
sumPay=0.0;
}
employee::~employee()
{
delete[]name;
}
void employee::displayStatus()
{
cout<
}
technician::technician()
{
hourlyRate=100;
}
void technician::pay()
{
cout<
cin>>workHours;
sumPay=hourlyRate*workHours;
}
void technician::displayStatus()
{
cout<
employee::displayStatus();
}
salesman::salesman()
{
CommRate=0.04;
}
void salesman::pay()
{
cout<
cin>>sales;
sumPay=sales*CommRate;
}
void salesman::displayStatus()
{
cout<
employee::displayStatus();
}
manager::manager()
{
monthlyPay=8000;
}
void manager:pay()
{
sumPay=monthlyPay;
}
void manager:displayStatus()
{
cout<
employee::displayStatus();
}
salesmanager::salesmanager()
{
monthlyPay=5000;
CommRate=0.05;
}
void salesmanager:pay()
{
cout<
cin>>sales;
sumPay=monthlyPay+sales*CommRate;
}
void salesmanager:displayStatus()
{
cout<
employee::displayStatus();
}
int _tmain(int argc, _TCHAR* argv[])
{
manager m1;
technician t1;
t1.pay();
t1.displayStatus();
salesman s1;
s1.pay();
s1.displayStatus();
salesmanager sm1;
sm1.pay();
sm1.displayStatus();
cout<
employee *ptr[4]={&m1,&t1,&s1,&sm1};
for(int i=0;i<4;i++)
{
ptr[i]->displayStatus();
}
return 0;
}