C++ 在C++;,如何将派生类中的私有变量设置为基类中的输入值?

C++ 在C++;,如何将派生类中的私有变量设置为基类中的输入值?,c++,inheritance,input,ifstream,derived-class,C++,Inheritance,Input,Ifstream,Derived Class,我有一个名为Employee的基类和一个名为EmployeeMerit的派生类。Employee类从输入文本文件读取数据,并将变量ID、JobClass、Years和ED设置为输入值 EmployeeMerit类应添加一个名为MeritRank的附加变量,并将其设置为输入文件中的附加输入值(已包含在文件中)。如果MeritRank设置为3,那么工资应该增加50美元。可变工资是受保护的成员,这意味着它被两个类使用 我有MeritRank作为私人会员参加EmployeeMerit班级。 Employ

我有一个名为Employee的基类和一个名为EmployeeMerit的派生类。Employee类从输入文本文件读取数据,并将变量ID、JobClass、Years和ED设置为输入值

EmployeeMerit类应添加一个名为MeritRank的附加变量,并将其设置为输入文件中的附加输入值(已包含在文件中)。如果MeritRank设置为3,那么工资应该增加50美元。可变工资是受保护的成员,这意味着它被两个类使用

我有MeritRank作为私人会员参加EmployeeMerit班级。 Employee类有一个readData函数,该函数根据输入文件设置变量

像这样:

void Employee::readData(ifstream& inf){
    inf >> ID >> Job_class >> Years >> Ed;
}
使用EmployeeMerit类中私有的MeritRank,如何将该变量设置为下一个输入?我就是这么想的。但是,当我运行程序时,MeritRank不会改变值。请记住,我不能使用友元类或公共变量

void EmployeeMerit::addToSalary(ifstream& inf) {
    employee::readData(inf);     //Base class function
    inf >> MeritRank;     //MeritRank is supposed to be set to next input #
    if (MeritRank == 3) {
        sal = sal + 50.0;
    }
}

似乎您需要从客户端使用一个函数调用读取所有数据。使
readData
a
virtual
成员函数

// Make it virtual in the declaration.
void Employee::readData(ifstream& inf){
    inf >> ID >> Job_class >> Years >> Ed;
}

// Overide the the derived class.
void EmployeeMerit::readData(ifstream& inf) {
    Employee::readData(inf);
    inf >> MeritRank;
    if (MeritRank == 3) {
        sal = sal + 50.0;
    }
}

现在,客户端只需调用对象上的
readData
。不需要先调用
readData
,然后再调用
addToSalary

使用调试器一次一行地逐步检查代码。检查输入流,确保它没有由于解析失败而处于错误状态,这将导致
>
运算符失败。了解如何使用调试器。了解如何使用调试器是每个C++开发人员的必备技能。谢谢您的响应。但是,也许我不清楚。sal是一个受保护的变量。我关心的是MeritRank,它没有被基类中的输入值修改。我应该发布更多代码吗?@user7912,请查看更新的答案。这可能对你有用。我仍然得到同样的结果。也许inf>>MeritRank没有读取任何输入:/