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

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章