员工工资(虚函数与多态)

152 阅读2分钟

​持续创作,加速成长!这是我参与「掘金日新计划 · 6 月更文挑战」的第10天,点击查看活动详情

题目描述

某公司员工的属性有:姓名、职位、级别、工作年限,级别和年限都是非负整数,否则显示错误。包含方法有:构造函数,计算工资的方法(salary())。

员工职位分为三种:Employee、Teamleader、Manager,其他职位类型显示错误。

三种职位员工的区别在于计算工资的方法不同:

1. Employee的每月工资 = 1000 + 500*级别 + 50*工作年限

2. Teamleader的每月工资 = 3000 + 800*级别 + 100*工作年限

3. Manager的每月工资 = 5000 + 1000 * (级别+工作年限)

计算工资的方法返回每个员工的工资数。

要求:以普通员工为基类,组长和经理继承基类,程序中只能使用基类指针指向对象与调用对象的方法。

输入

测试案例的个数 t

每行输入一个员工的信息:包括姓名、职位、级别、工作年限

输出

输出相应员工的信息

如有错误信息,则输出错误信息,若职位信息与级别和年限信息同时出错,仅输出职位错误信息

输入样例1

5
zhangsan Employee 4 5
lisi Teamleader 4 5
Wangwu Manager 4 5
chenliu Precident 4 5
xiaoxiao Manager -1 5

输出样例1

zhangsan:Employee,Salary:3250
lisi:Teamleader,Salary:6700
Wangwu:Manager,Salary:14000
error position.
error grade or year.

思路分析

好像没什么要讲的,主要考查多态和虚函数的知识。

AC代码

#include"iostream"
#include"string"
using namespace std;
class staff
{
protected:
	string name, work;
	int rank,year;
public:
	staff(string name,string work,int rank,int year) :name(name),work(work),rank(rank),year(year){
	}
	virtual int salary(){}
	virtual void display(){}
};
class Employee :public staff
{
public:
	Employee(string name, string work, int rank, int year) :staff(name,work,rank,year) {
	}
	virtual int salary() { return 1000 + 500 * rank + 50 * year; }
	virtual void display() { cout << name << ":Employee,Salary:" << salary() << endl; }
};
class Teamleader :public staff
{
public:
	Teamleader(string name, string work, int rank, int year) :staff(name, work, rank, year) {
	}
	virtual int salary() { return 3000 + 800 * rank + 100 * year; }
	virtual void display() { cout << name << ":Teamleader,Salary:" << salary() << endl; }
};
class Manager :public staff
{
public:
	Manager(string name, string work, int rank, int year) :staff(name, work, rank, year) {
	}
	virtual int salary() { return 5000+1000*(rank+year); }
	virtual void display() { cout << name << ":Manager,Salary:" << salary() << endl; }
};
int main()
{
	int t, rank,year;
	cin >> t;
	staff * p;
	string animal[3] = { "Employee","Teamleader","Manager" }, name, kind;
	while (t--)
	{
		cin>> name >> kind  >> rank>>year;
		if (kind == animal[0]&&rank>=0&&year>=0)
			p = new Employee(name, kind,rank,year);
		else if (kind == animal[1] && rank >= 0 && year >= 0)
			p = new Teamleader(name, kind,rank,year);
		else if (kind == animal[2] && rank >= 0 && year >= 0)
			p = new Manager(name,kind, rank,year);
		else if(rank >= 0 && year >= 0)
		{
			cout << "error position." << endl;
			continue;
		}
		else
		{
			cout << "error grade or year." << endl;
			continue;
		}
		p->display();
	}
}