一个简单的人员信息管理程序(虚函数与多态的使用)

具体要求如下:


(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个),通过相应方法输出这些对象的姓名(姓名的初始化通过键盘录入),员工号,收入(多态的形式)。 
#include <iostream>
#include <string>
using namespace std;

class employee {
public:
	employee(string name,int ID):m_Name(name),m_ID(ID){}
	employee() {}
	virtual ~employee() {}
public:
	void setName(string name) { m_Name = name; }
	virtual void setIncome(int x) {}	//设置收入,重载3
	virtual void setIncome(int x,float y) {}
	virtual void setIncome(int x, float y,int z) {}
	//void getName() { cout <<"name is" <<m_Name << endl; }
	//void getIncome() { cout <<"income is "<< m_Income << endl; }
	//void getID() { cout <<"ID is"<< m_ID << endl; }
	virtual void display() {}
protected:
	string m_Name;
	int m_Income;
	int m_ID;
};

class saleman:virtual public employee {
public:
	saleman(string name, int ID) :employee(name,ID) {}
	saleman() {}
public:
	void setIncome( int m_Sales, float m_Scale) { m_Income = m_Sales * m_Scale; }
	void display() { cout << m_Name << "is a saleman is " << m_Income << ",  ID=" << m_ID << endl; }
protected:
	int m_Sales;
	float m_Scale;
};

class technician :public employee {
public:
	technician(string name, int ID) :employee(name, ID) {}
	technician() {}
public :
	void setIncome(int m_Time, float m_Rate) { m_Income = m_Time * m_Rate; }
	void display() { cout << m_Name << "is a technician,income is " << m_Income << ",  ID=" << m_ID << endl; }
protected:
	int m_Time;
	int m_Rate;
};
class manager :virtual public employee {
public:
	manager(string name, int ID) :employee(name, ID) {}
	manager() {}
public:
	void setIncome(int income) { m_FixedIncome = income,m_Income = m_FixedIncome; }
	void display() { cout << m_Name << "is a manager,income is " << m_Income << ",  ID=" << m_ID << endl; }
protected:
	int m_FixedIncome;
};

class salemanager :public saleman ,public manager {
	public:
		salemanager(string name, int ID) :employee(name, ID) {}
		salemanager() {}
public:
	void setIncome(int sales, float scale, int fixedincome) { m_Sales = sales, m_Scale = scale, m_FixedIncome = fixedincome;m_Income = m_Sales * m_Scale + m_FixedIncome; }
	void display() { cout << m_Name << "is a salemanager,income is " << m_Income << ",  ID=" << m_ID << endl; }
};

int main()
{ 
	employee *p[8] = {new employee() };
	p[0] = new saleman("赵小", 2);
	p[0]->setIncome(1400, 0.2);
	p[1] = new salemanager("王大", 1);
	p[1]->setIncome(1465,0.2,5000);
	p[2] = new manager("张三", 3);
	p[2]->setIncome(5000);
	p[3] = new technician("李四", 4);
	p[3]->setIncome(240,20.0);
	for (int i = 0;i < 4;i++) {
		p[i]->display();
		delete p[i];
	}
	system("pause");

}


  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值