(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;}