(1)程序涉及到五个类,分别是employee,technician,salesman,manager,salsemanager。这五个类的关系为:employee是顶层父类,technician,salesman,manager是employee的子类,salsemanager是salesman,manager的子类。
(2)employee具有员工号,姓名,收入等属性,有设置姓名,获取姓名,获取员工号,获取收入等函数。
(3)technician的收入计算方法为工作小时数*时薪,另外具有设置工作小时数,时薪的函数,具有工作小时数和时薪的属性。
salesman的收入计算方法为销售额*提成比例,另外具有设置销售额,提成比例的函数,具有销售额和提成比例的属性。
manager的收入计算方法为固定月薪,另外具有设置固定月薪的函数,具有固定月薪的属性。salsemanager收入计算方法为销售额*提成比例+固定月薪。
(4)要求利用employee类型的指针数组,指向8个子类对象(technician,salesman,manager,salsemanager每个类2个),
通过相应方法输出这些对象的姓名(姓名的初始化通过键盘录入),员工号,收入(多态的形式)。
(5)整个程序分为3个文件,employee.h,employee. cpp,mainemployee.cpp,分别用来声明类,实现类,
以及实现主函数。在VC++环境下以project的形式进行联编并输出结果。
主函数
#include "stdafx.h"
#include<iostream>
#include "employee.h"
using namespace std;
int _tmain(int argc, _TCHAR* argv[])
{
int hour=210;
int hourWage=13;
employee p1 ;
manager m;
p1.setName("张三");
p1.setNumber(1001);
cout<<"姓名:"<<p1.getName()<<endl;
cout<<"工号:"<<p1.getNumber()<<endl;
cout<<"职位:"<<m.position()<<endl;
m.setMonthPay(2500);
cout<<"工资:"<<m.pay()<<endl;
cout<<"*******************:"<<endl;
employee p2;
technician t;
p2.setName("李四");
p2.setNumber(1002);
cout<<"姓名:"<<p2.getName()<<endl;
cout<<"工号:"<<p2.getNumber()<<endl;
cout<<"职位:"<<t.position()<<endl;
t.setHour(hour);
t.setHourPay(hourWage);
cout<<"工资:"<<t.pay()<<endl;
cout<<"*******************:"<<endl;
employee p3;
salesman s;
p3.setName("王二");
p3.setNumber(1003);
cout<<"姓名:"<<p3.getName()<<endl;
cout<<"工号:"<<p3.getNumber()<<endl;
cout<<"职位:"<<s.position()<<endl;
s.setRate(0.3);
s.setSale(20000);
cout<<"工资:"<<s.pay()<<endl;
cout<<"*******************:"<<endl;
employee p4;
salsemanager s1;
p4.setName("麻子");
p4.setNumber(1004);
cout<<"姓名:"<<p4.getName()<<endl;
cout<<"工号:"<<p4.getNumber()<<endl;
cout<<"职位:"<<s1.position()<<endl;
s1.setRate(0.3);
s1.setSale(20000);
s1.setMonthPay(2500);
cout<<"工资:"<<s1.pay()<<endl;
cout<<"*******************:"<<endl;
return 0;
}
类声明
#pragma once
class employee
{
public:
void setNumber(int number);
void setName(char *name);
int getNumber();
char*getName();
double getSalary();
virtual double pay();
int e_number;
char e_name[20];
double e_salary;
};
class manager:public employee
{
public:
virtual void setMonthPay(int pay);
virtual char* position( );
double pay();
private:
int monthPay;
};
class technician:public employee
{
public:
void setHour(int hour);
void setHourPay(int hourPay);
virtual char* position();
double pay();
private:
int t_hour;
int t_hourPay;
};
class salesman:public employee
{
public:
virtual void setRate(double rate);
virtual void setSale(int sale);
virtual char* position();
double pay();
private:
int s_sale;
double s_rate;
};
class salsemanager:public salesman,public manager
{
public:
double pay();
void setRate(double rate);
void setSale(int sale);
void setMonthPay(int pay);
virtual char* position();
private:
int s_sale;
double s_rate;
int monthPay;
};
类实现
#include "StdAfx.h"
//#include "employee.h"
#include<string.h>
class employee
{
public:
void setNumber(int number);
void setName(char *name);
int getNumber();
char*getName();
double getSalary();
virtual double pay();
private:
int e_number;
char e_name[20];
double e_salary;
};
void employee::setNumber(int number){e_number = number;}
void employee::setName(char *name){ strcpy(e_name,name);}
int employee::getNumber(){return e_number;}
char*employee::getName(){ return e_name;}
double employee::getSalary(){ return e_salary;}
double employee::pay(){ return e_salary;}
class manager:public employee
{
public:
virtual void setMonthPay(int pay);
double pay();
virtual char* position( );
private:
int monthPay;
};
void manager::setMonthPay(int pay){ monthPay = pay;}
double manager::pay(){ return monthPay;}
char* manager::position( ){return "manager";}
class technician:public employee
{
public:
void setHour(int hour);
void setHourPay(int hourPay);
virtual char* position();
double pay();
private:
int t_hour;
int t_hourPay;
};
void technician::setHour(int hour){t_hour = hour;}
void technician::setHourPay(int hourPay){t_hourPay = hourPay;}
char* technician::position(){ return "technician";}
double technician::pay(){ return t_hour*t_hourPay;}
class salesman:public employee
{
public:
virtual void setRate(double rate);
virtual void setSale(int sale);
virtual char* position();
double pay();
private:
int s_sale;
double s_rate;
};
void salesman::setRate(double rate){ s_rate = rate;}
void salesman::setSale(int sale){ s_sale = sale;}
char* salesman::position(){ return "salesman";}
double salesman::pay(){ return s_sale*s_rate; }
class salsemanager:public salesman,public manager
{
public:
double pay();
void setRate(double rate);
void setSale(int sale);
virtual char* position();
void setMonthPay(int pay);
private:
int s_sale;
double s_rate;
int monthPay;
};
double salsemanager::pay(){ return monthPay+ s_rate*s_sale;}
void salsemanager::setRate(double rate){ s_rate = rate;}
void salsemanager::setSale(int sale){ s_sale = sale;}
char* salsemanager::position(){ return "salsemanager";}
void salsemanager::setMonthPay(int pay){ monthPay = pay;}