虚函数的返回类型解决方法
虚函数的返回类型
#include<iostream>
#include<string>
using namespace std;
//定义员工类
class staff
{
public:
staff (string nu,string na,float ra,float bs,int pr)
{
num=nu;
name=na;
rate=ra;
basicsal=bs;
prize=pr;
}
void output()
{
cout<<"该员工的编号为 "<<num<<endl;
cout<<"该员工的姓名为 "<<name<<endl;
cout<<"该员工的出勤率为 "<<rate<<endl;
cout<<"该员工的基本工资为 "<<basicsal<<endl;
cout<<"该员工的奖金为 "<<prize<<endl;
}
float fun()
{
sal=basicsal+prize*rate;
return sal;
}
virtual void display()
{
cout<<"该员工的实发工资为 "<<sal<<endl;
cout<<endl;
}
private:
string num,name;
float rate,basicsal,sal;
int prize;
};
//定义销售员类
class saleman:public staff
{
public:
saleman(string nu,string na,float ra,float bs,int pr,float dra,int pa):staff(nu,na,ra,bs,pr)
{
deductrate=dra;
personamount=pa;
}
void output1()
{
staff::output();
cout<<"该销售员的提成比例为 "<<deductrate<<endl;
cout<<"该销售员的个人销售额为 "<<personamount<<endl;
}
float fun1()
{
sal1=fun()+deductrate*personamount;
return sal1;
}
void display()
{
cout<<"该销售员的实发工资为 "<<sal1<<endl;
cout<<endl;
}
private:
float deductrate,sal1;
int personamount;
};
//定义经理类
class manager:public staff
{
public:
manager(string nu,string na,float ra,float bs,int pr,float tdr,int tpa):staff(nu,na,ra,bs,pr)
{
totaldeductrate=tdr;
tatalamount=tpa;
}
void output2()
{
staff::output();
cout<<"该经理的提成比例为 "<<totaldeductrate<<endl;
cout<<"该经理的个人销售额为 "<<tatalamount<<endl;
}
float fun2()
{
sal2=fun()+totaldeductrate*tatalamount;
return sal2;
}
void display()
{
cout<<"该经理的实发工资为 "<<sal2<<endl;
cout<<endl;
}
protected:
float totaldeductrate,sal2;
int tatalamount;
};
//定义销售经理类
class salemanager:public saleman,public manager
{
public:
salemanager(string nu,string na,float ra,float bs,int pr,float dra,int pa,float tdr,int tpa)
:saleman(nu,na,ra,bs,pr,dra,pa),manager(nu,na,ra,bs,pr,tdr,tpa)
{}
void output3()
{
saleman::output1();
cout<<"该销售经理的提成比例为 "<<totaldeductrate<<endl;
cout<<"该销售经理的个人销售额为 "<<tatalamount<<endl;
}
void fun3()
{
sal3=fun1()+totaldeductrate*tatalamount;
cout<<"该销售经理的实发工资为 "<<sal3<<endl;
cout<<endl;
}
private:
float sal3;
};
void test(staff &ab)
{
cout<<ab.display()<<endl;
}
int main()
{
staff s1("01","余亮",0.8f,2000,100);
s1.output();
s1.fun();
test(s1);
cout<<endl;
saleman s2("02","王蒙",0.9f,2500,200,0.5f,500);
s2.output1();
s2.fun1();
test(s2);
cout<<endl;
manager s3("03","刘俊",0.95f,3000,1000,0.4f,1000);
s3.output2();
s3.fun2();
test(s3);
cout<<endl;
salemanager s4("04","李志岗",0.98f,5000,2000,0.5f,500,0.4f,1000);
s4.output3();
s4.fun3();
cout<<endl;
return 0;
}
//错误显示: cpp(131) : error C2679: binary '<<' : no operator defined which takes a right-hand operand of type 'void' (or there is no acceptable conversion)
------解决方案--------------------
楼主啊,ab.display(); 返回的是void, 你叫void 怎么输出啊。
在test函数内修改下就行了。
这分拿的都不好意思了。
void test(staff &ab)
{
cout<<ab.display()<<endl;
}
===>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
void test(staff &ab)
{
#include<iostream>
#include<string>
using namespace std;
//定义员工类
class staff
{
public:
staff (string nu,string na,float ra,float bs,int pr)
{
num=nu;
name=na;
rate=ra;
basicsal=bs;
prize=pr;
}
void output()
{
cout<<"该员工的编号为 "<<num<<endl;
cout<<"该员工的姓名为 "<<name<<endl;
cout<<"该员工的出勤率为 "<<rate<<endl;
cout<<"该员工的基本工资为 "<<basicsal<<endl;
cout<<"该员工的奖金为 "<<prize<<endl;
}
float fun()
{
sal=basicsal+prize*rate;
return sal;
}
virtual void display()
{
cout<<"该员工的实发工资为 "<<sal<<endl;
cout<<endl;
}
private:
string num,name;
float rate,basicsal,sal;
int prize;
};
//定义销售员类
class saleman:public staff
{
public:
saleman(string nu,string na,float ra,float bs,int pr,float dra,int pa):staff(nu,na,ra,bs,pr)
{
deductrate=dra;
personamount=pa;
}
void output1()
{
staff::output();
cout<<"该销售员的提成比例为 "<<deductrate<<endl;
cout<<"该销售员的个人销售额为 "<<personamount<<endl;
}
float fun1()
{
sal1=fun()+deductrate*personamount;
return sal1;
}
void display()
{
cout<<"该销售员的实发工资为 "<<sal1<<endl;
cout<<endl;
}
private:
float deductrate,sal1;
int personamount;
};
//定义经理类
class manager:public staff
{
public:
manager(string nu,string na,float ra,float bs,int pr,float tdr,int tpa):staff(nu,na,ra,bs,pr)
{
totaldeductrate=tdr;
tatalamount=tpa;
}
void output2()
{
staff::output();
cout<<"该经理的提成比例为 "<<totaldeductrate<<endl;
cout<<"该经理的个人销售额为 "<<tatalamount<<endl;
}
float fun2()
{
sal2=fun()+totaldeductrate*tatalamount;
return sal2;
}
void display()
{
cout<<"该经理的实发工资为 "<<sal2<<endl;
cout<<endl;
}
protected:
float totaldeductrate,sal2;
int tatalamount;
};
//定义销售经理类
class salemanager:public saleman,public manager
{
public:
salemanager(string nu,string na,float ra,float bs,int pr,float dra,int pa,float tdr,int tpa)
:saleman(nu,na,ra,bs,pr,dra,pa),manager(nu,na,ra,bs,pr,tdr,tpa)
{}
void output3()
{
saleman::output1();
cout<<"该销售经理的提成比例为 "<<totaldeductrate<<endl;
cout<<"该销售经理的个人销售额为 "<<tatalamount<<endl;
}
void fun3()
{
sal3=fun1()+totaldeductrate*tatalamount;
cout<<"该销售经理的实发工资为 "<<sal3<<endl;
cout<<endl;
}
private:
float sal3;
};
void test(staff &ab)
{
cout<<ab.display()<<endl;
}
int main()
{
staff s1("01","余亮",0.8f,2000,100);
s1.output();
s1.fun();
test(s1);
cout<<endl;
saleman s2("02","王蒙",0.9f,2500,200,0.5f,500);
s2.output1();
s2.fun1();
test(s2);
cout<<endl;
manager s3("03","刘俊",0.95f,3000,1000,0.4f,1000);
s3.output2();
s3.fun2();
test(s3);
cout<<endl;
salemanager s4("04","李志岗",0.98f,5000,2000,0.5f,500,0.4f,1000);
s4.output3();
s4.fun3();
cout<<endl;
return 0;
}
//错误显示: cpp(131) : error C2679: binary '<<' : no operator defined which takes a right-hand operand of type 'void' (or there is no acceptable conversion)
------解决方案--------------------
楼主啊,ab.display(); 返回的是void, 你叫void 怎么输出啊。
在test函数内修改下就行了。
这分拿的都不好意思了。
void test(staff &ab)
{
cout<<ab.display()<<endl;
}
===>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
void test(staff &ab)
{