计算员工的工资(虚函数)

虚函数和多态性的简单应用,计算员工的工资

#include<iostream>
#include<cstring>
using namespace std;
class Employee
{protected:
	char name[20];
	int number;
	double basicSalary;
public:
	Employee(char*pn="\0",int num=0, double bs=0);
	virtual void input();
	double salary();
	virtual void output();//用了虚函数的版本,突然发现自己记错了一个知识点,虚函数是可以在类外定义的在类内声明
};
class Salesman:public Employee
{protected:
	double sales;
	static double commrate;
public:
	Salesman(char*pn="\0",int num=0, double bs=2000,double s=0);
	void input();
	double salary();
	void output();

};
double Salesman::commrate=0.005;
class Salesmanager:public Salesman
{protected:
	double jobSalary;
public:
	Salesmanager(char*pn="\0",int num=0,double bs=2000,double s=0,double job=3000);
    void input();
	double salary();
	void output();

};
Employee::Employee(char*pn,int num, double bs)
{
	strcpy(name,pn);
	number=num;
	basicSalary=bs;
}
void Employee::input()
{
	cout<<"please input the name:  ";cin>>name;
	cout<<"please input the number: ";cin>>number;
}
double Employee::salary()
{return basicSalary;}
void Employee::output()
{
	cout<<"Employee:\nname: "<<name<<"\tnumber:"<<number<<"\tsalary: "<<salary()<<endl;
}
Salesman::Salesman(char*pn,int num,double bs,double s):Employee(pn,num,bs)
{sales=s;}
void Salesman::input()
{
	Employee::input();
	cout<<"please input  the sales:";cin>>sales;
}
double Salesman::salary()
{return Employee::salary()+sales*commrate;}
void Salesman::output()
{cout<<"Salesman:\nname: "<<name<<"\tnumber:"<<number<<"\tsalary: "<<salary()<<endl;}
Salesmanager::Salesmanager(char*pn,int num, double bs,double s, double job):Salesman(pn,num,bs,s)
{jobSalary=job;}
void Salesmanager::input()
{
	Salesman::input();
}
double Salesmanager::salary()
{return Salesman::salary()+jobSalary;}
void Salesmanager::output()
{	cout<<"Salesmanger:\nname: "<<name<<"\tnumber:"<<number<<"\tsalary: "<<salary()<<endl;
}
int main()
{
	Employee e1("sunyucui",001),*p;
	p=&e1;//多态性的实现利用的虚函数和基类指针
	p->input();
	p->output();
	//e1.input();e1.output();
	Salesman s1("sun",002,2000,20);
	p=&s1;
	p->input();
	p->output();
	//s1.input();s1.output();
	Salesmanager s2("yucui",003,2000,50,3000);
	p=&s2;
	p->input();
	p->output();
	//s2.input();s2.output();
	return 0;
}

猜你喜欢

转载自blog.csdn.net/weixin_41499217/article/details/80871142