虚函数的返回类型解决方法

虚函数的返回类型
#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)
 {