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

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

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

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
#include<iostream> using namespace std; class Employee{ protected: string name;//员工名字 string address;//员工住址 public: Employee(string n, string a):name(n), address(a){} virtual double pay() = 0;//虚函数计算工资 virtual void display() = 0;//虚函数,输出员工信息 }; class SalariedEmployee:public Employee{//固定工资工人 protected: double salary;//月薪 public: SalariedEmployee(string n, string a, double s):Employee(n, a), salary(s){} double pay(){//计算工资 return salary; } void display(){//输出员工信息 cout<<"姓名:"<<name<<"\t住址:"<<address<<"\t月薪:"<<pay()<<endl; } }; class PieceWorker:public Employee{//计件工人 protected: int pieces;//产品数量 double wage;//每件产品的工资 public: PieceWorker(string n, string a, int p, double w):Employee(n, a), pieces(p), wage(w){} double pay(){//计算工资 return pieces*wage; } void display(){//输出员工信息 cout<<"姓名:"<<name<<"\t住址:"<<address<<"\t工资:"<<pay()<<endl; } }; class HourlyWorker:public Employee{//计时工人 protected: double hours;//工作时间 double wage;//每小时工资 public: HourlyWorker(string n, string a, double h, double w):Employee(n, a), hours(h), wage(w){} double pay(){//计算工资 return hours*wage; } void display(){//输出员工信息 cout<<"姓名:"<<name<<"\t住址:"<<address<<"\t工资:"<<pay()<<endl; } }; int main(){ Employee *p[3];//定义基类指针数组 p[0] = new SalariedEmployee("张三", "上海", 5000); p[1] = new PieceWorker("李四", "北京", 200, 20); p[2] = new HourlyWorker("王五", "广州", 8, 100); for(int i=0; i<3; i++){ p[i]->display();//调用虚函数输出员工信息 } return 0; }

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值