//某学校对教师每月工资的计算公式如下:固定工资+课时补贴。 //教授的固定工资为5000元,每个课时补贴50元; //副教授的固定工资为3000元, 每个课时补贴30元; //讲师的固定工资为2000元,每个课时补贴20元。 //定义教师抽象类,派生不同职称的教师类,编写程序求若干教师的月工资。 #include<iostream> using namespace std; class teacher{ protected: int workhour; double salary; public: teacher(int wh=0){workhour=wh;} virtual double calsalary()=0; void print(){cout<<"工资为"<<salary<<endl;} }; class professor:public teacher{ public: professor(int wh):teacher(wh){} virtual void calsalary(){salary=5000+50*workhour;} }; class viceprofessor:public teacher{ public: viceprofessor(int wh=0):teacher(wh){} virtual void calsalary(){salary=3000+30*workhour;} }; class lecturer:public teacher{ public: lecturer(int wh=0):teacher(wh){} virtual void calsalary(){salary=2000+20*workhour;} }; int main(){ teacher *p; professor a(200); viceprofessor b(240); lecturer c(260); p=&a; p->calsalary(); cout<<"professor-"; a.print(); p=&b; p->calsalary(); cout<<"viceprofessor-"; b.print(); p=&c; p->calsalary(); cout<<"lecturer-"; c.print(); return 0; }有什么错,怎么改,为什么
时间: 2024-03-22 13:39:09 浏览: 7
代码中存在一个错误:在 `professor` 和 `viceprofessor` 类中,`calsalary()` 函数应该是 `double` 类型,而不是 `void` 类型。因此,需要将这两个类中的 `calsalary()` 函数改为 `double calsalary()`。
修改后的代码如下:
```cpp
#include<iostream>
using namespace std;
class teacher{
protected:
int workhour;
double salary;
public:
teacher(int wh=0){workhour=wh;}
virtual double calsalary()=0;
void print(){cout<<"工资为"<<salary<<endl;}
};
class professor:public teacher{
public:
professor(int wh):teacher(wh){}
virtual double calsalary(){salary=5000+50*workhour; return salary;}
};
class viceprofessor:public teacher{
public:
viceprofessor(int wh=0):teacher(wh){}
virtual double calsalary(){salary=3000+30*workhour; return salary;}
};
class lecturer:public teacher{
public:
lecturer(int wh=0):teacher(wh){}
virtual double calsalary(){salary=2000+20*workhour; return salary;}
};
int main(){
teacher *p;
professor a(200);
viceprofessor b(240);
lecturer c(260);
p=&a;
p->calsalary();
cout<<"professor-";
a.print();
p=&b;
p->calsalary();
cout<<"viceprofessor-";
b.print();
p=&c;
p->calsalary();
cout<<"lecturer-";
c.print();
return 0;
}
```
修改后的代码可以正确地计算教师的月工资,并输出结果。