2016-11-25 54 views
-1

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

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

我将EmployeeMerit类中的MeritRank设置为私有成员。 Employee类具有根据输入文件设置变量的readData函数。

像这样:

void Employee::readData(ifstream& inf){ 
    inf >> ID >> Job_class >> Years >> Ed; 
} 

使用MeritRank是在EmployeeMerit类私有的,我怎么变量设置为下一个输入?这就是我的想法。但是,当我运行该程序时,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; 
    } 
} 
+0

使用调试器一次一行地执行代码。检查输入流并确保它不是由于解析失败而导致的错误状态,这会导致'>>'运算符失败。了解如何使用调试器。了解如何使用调试器是每个C++开发人员的必备技能。 –

回答

0

看来你需要从客户端使用一个函数调用读取所有的数据。使readData成为一个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

+0

感谢您的回复。但是,也许我不清楚。 sal是一个受保护的变量。我担心MeritRank,它不会被基类中的输入值修改。我应该发布更多的代码吗? – user7912

+0

@ user7912,查看更新后的答案。这可能适合你。 –

+0

我仍然获得相同的输出。也许inf >> MeritRank没有阅读任何输入:/ – user7912

相关问题