C++实验06(02)学院员工-多态性

题目描述
某学院的员工包括教师、行政人员。其中行政人员有基本工资和岗位津贴,教师有基本工资和课时津贴(课时津贴=课时量小时课酬(元/小时)),已知:
行政人员的年薪=基本工资
12+岗位津贴
教师的年薪=基本工资12+课时量小时课酬
定义抽象类Person类,数据成员有工号、姓名、基本工资(double型);成员函数有带参构造函数、虚函数print()、纯虚函数calSalary();定义Person的公有派生类教师类、行政人员类,增加相应的数据成员(均为double型)。计算各类人员的年薪并输出。
主函数中定义教师类、行政人员类对象,其初始值均由键盘输入,利用C++的多态性,利用基类指针调用虚函数,计算各类人员的年薪并输出
输入描述
行政人员类对象的初始值
教师类对象的初始值
输出描述
行政人员类、教师类对象的工号、姓名、年薪
输入样例
1001 赵云 4500 1500
10003 刘玄德 6700 120 50
输出样例
工号:1001
姓名:赵云
年薪:55500
工号:10003
姓名:刘玄德
年薪:86400

#include <iostream>
#include <string>
using namespace std;

class Person
{
    
    
public:
	Person(int a, string b, double c);
	virtual void print();
	virtual void calSalary() = 0;
	double GetWage()
	{
    
    
		return Wage;
	}
private:
	int Num;
	string Name;
	double Wage;
};

Person::Person(int a, string b, double c)
{
    
    
	Num=a;
	Name=b;
	Wage=c;
}

void Person::print()
{
    
    
	cout << "工号:" << Num << endl;
	cout << "姓名:" << Name<< endl;
}
class Teacher : public Person
{
    
    
public:
	Teacher(int a, string b, double c,double d,double e);
	virtual void print();
	void calSalary();
private:
	double HourlyPay;
	double Hours;
};

void Teacher::print()
{
    
    
	Person::print();
	Teacher::calSalary();
}

void Teacher::calSalary()
{
    
    
	cout << "年薪:" << GetWage() * 12 + Hours * HourlyPay << endl;
}
Teacher::Teacher(int a, string b, double c,double d,double e):Person(a, b, c)
{
    
    
	Hours=d;
	HourlyPay=e;
}

class Administrator : public Person
{
    
    
public:
	Administrator(int a, string b, double c, double d);
	virtual void print();
	void calSalary();
private:
	double PostAllowance;
};
Administrator::Administrator(int a, string b, double c, double d) :Person(a, b, c)
{
    
    
	PostAllowance = d;
}
void Administrator::calSalary()
{
    
    
	cout << "年薪:" << GetWage() * 12 + PostAllowance << endl;
}
void Administrator::print()
{
    
    
	Person::print();
	Administrator::calSalary();
}
int main()
{
    
    
	int Num1;
	string Name1;
	double Wage1;
	double PostAllowance;
	int Num2;
	string Name2;
	double Wage2;
	double HourlyPay;
	double Hours;
	cin >> Num1 >> Name1 >> Wage1 >> PostAllowance >> Num2 >> Name2 >> Wage2 >> Hours >> HourlyPay;
	Administrator A(Num1,Name1,Wage1,PostAllowance);
	Teacher B(Num2, Name2, Wage2, Hours, HourlyPay);
	Person *p1, *p2;
	p1 = &A;
	p2 = &B;
	p1->print();
	p2->print();
	return 0;
}

猜你喜欢

转载自blog.csdn.net/weixin_44179485/article/details/105452268