【发布时间】:2020-03-21 01:09:25
【问题描述】:
抱歉,代码太长了,让我简单解释一下。我做了一个主类 - 工人和两个派生类 - 小时工,受薪工人。我做了一个计算工资的虚函数,不用解释了,这不是我的问题。
我读了一个输入,这里是一个例子:
3 //我读取的第一个数字决定了我将拥有多少工人
戴夫·萨尔
史蒂夫·侯
chris sal //这 3 行显示工人的姓名,以及他们是按工资还是按小时支付的
10 20 10 //这 3 名工人的工作时间,按此顺序。
这就是我想要做的:根据每个工人获得的付款类型(hou 或 sal),我计算他的薪水,调用虚函数 compute_pay。 示例输出:
戴夫 400
史蒂夫 200
克里斯400。 这是我的代码:
#include <iostream>
#include <fstream>
#include <string>
#include <vector>
using namespace std;
class Worker {
public:
void print();
protected:
string name;
string type;
};
class HourlyWorker : public Worker {
public:
HourlyWorker(string n) {
name = n;
}
virtual double compute_pay(int hours) {
double payment = 10;
if (hours <= 40) {
return hours * payment;
}
else {
return (40 * payment) + ((hours - 40) * payment * 1.5);
}
}
void print(int a) {
cout << name << " " << a << "\n";
}
private:
string name;
string type;
}
class SalariedWorker : public Worker{
public:
SalariedWorker(string n) {
name = n;
}
virtual double compute_pay(int hours) {
hours = 40;
int payment = 10;
return payment * hours;
}
void print(int a) {
cout << name << " " << a << "\n";
}
private:
string name;
string type;
};
void print(vector<SalariedWorker*> sal, int a)
{
for (int i = 0; i < sal.size(); i++)
sal[i]->print(a);
}
void print(vector<HourlyWorker*> sal, int a)
{
for (int i = 0; i < sal.size(); i++)
sal[i]->print(a);
}
int main()
{
vector<SalariedWorker*> sal;
vector<HourlyWorker*> hour;
int first; //first digit
int hours; //hours of each worker
string name; //name or worker
string type; //sal or hou
cout << "go" << "\n";
cin >> first;
for (int i = 0; i < first+1; i++) {
if (i < first) {
cin >> name >> type;
if (type == "sal") {
SalariedWorker* sall = new SalariedWorker(name);
sal.push_back(sall); //If a worker is "sal" i write into the HourlyWorker vector
}
else if (type == "hou") {
HourlyWorker* hourr = new HourlyWorker(name);
hour.push_back(hourr);
} //If a worker is "hou" i write into the HourlyWorker vector
else {
cout << "Wrong input" << "\n";
return 1;
}
}
else { //This triggers when we reach the last line. It triggers only once
for (int z = 0; z < first; z++) {
cin >> hours; //reading the last line
}
}
}
}
再次抱歉,代码太长了,您不必遍历所有代码,只需了解主类,更重要的是 - 循环。 这是我的问题:假设它需要的 int 变量是我在最后一行读取的 int hours 变量,我应该在哪里调用我的 compute_pay 函数以便它遍历所有行? 另外,之后我应该在哪里调用我的打印函数以便我可以看到我的输出? 我知道这是一个愚蠢或复杂的问题,但老实说,我尽了最大努力,但我无法弄清楚:/。
【问题讨论】:
-
你能澄清你的问题吗?这很难理解。 “我应该在哪里调用我的
compute_pay函数,以便它通过所有行” - 什么行?compute_pay“通过”一行是什么意思?正如所写,compute_pay没有“经历”任何事情。 -
抱歉造成误会。行我的意思是输入行。这是它应该如何工作的示例: 1 - 它读取一个人的名字。 2 - 它读取sal/hou(支付方式),并根据它将人置于两个向量之一——sal、小时。 3 - 在读取所有名称后,它会再读取一行 - 每个工人的工作时间。第一个数字是第一个工人,第二个是第二个,等等。这样做之后,根据付款的类型 - sal/hou 它调用函数 compute_pay 并以此方式计算付款。我应该在阅读最后一行时还是之后调用它?
标签: c++ inheritance vector virtual-functions