C++ 使用继承时未获得文件的正确输出

C++ 使用继承时未获得文件的正确输出,c++,inheritance,file-io,C++,Inheritance,File Io,所以我的程序的重点是从文件中读取输入,进行一些计算,然后将结果输出到文件中。 这涉及到几个文件,但为了简单起见,我将只包括我的程序的两个实现文件。实现文件“employee”是基类,文件“merit”是派生类 现在对于输出,我应该以:ID--Salary的格式得到它 我得到的薪水结果是正确的,但ID的数字是错误的。我知道这与以下事实有关:在merit::print()函数中,它打印的是[merit::ID],而不是[employee::ID] 有没有办法让它打印出employee::ID而不是m

所以我的程序的重点是从文件中读取输入,进行一些计算,然后将结果输出到文件中。 这涉及到几个文件,但为了简单起见,我将只包括我的程序的两个实现文件。实现文件“employee”是基类,文件“merit”是派生类

现在对于输出,我应该以:ID--Salary的格式得到它

我得到的薪水结果是正确的,但ID的数字是错误的。我知道这与以下事实有关:在merit::print()函数中,它打印的是[merit::ID],而不是[employee::ID]

有没有办法让它打印出employee::ID而不是merit::ID

以下是基类文件(员工文件):

#包括
#包括
#包括
#包括“employee.h”
#包括“优点.h”
使用名称空间std;
//employee类的成员函数的定义如下。
void employee::readData(ifstream&inf)
{
inf>>ID>>职务等级>>年限>>教育;
}
无效员工::打印(流和流出)常量
{

outp您没有向我们显示您定义类的头文件,因此这可能不太正确。我假设
employee
merit
都有一个名为
ID
的成员

要访问与派生类中的成员同名的基类成员,只需限定名称。在您的情况下,请使用
employee::ID
而不是
ID


您在注释中指出,
ID
employee
中是私有的,因此需要使用getter函数。将类似于
int-getEmployeeID()const;
的内容添加到
employee
类中(它可以是受保护的,也可以是公共的)这将返回ID。然后从您的
merit
类调用它以获取员工ID。

您没有向我们显示您定义类的头文件,因此这可能不太正确。我假设
employee
merit
都有一个名为
ID
的成员

要访问与派生类中的成员同名的基类成员,只需限定名称。在您的情况下,请使用
employee::ID
而不是
ID


您在注释中指出,
ID
employee
中是私有的,因此需要使用getter函数。将类似于
int-getEmployeeID()const;
的内容添加到
employee
类中(它可以是受保护的,也可以是公共的)这将返回ID。然后从您的
merit
类调用它以获取员工ID。

ID
static吗?@Jerfov2 ID从输入文件读取。然后它应该显示在输入文件上。函数merit::readData()调用函数employee::readData()它从输入文件中读取ID。@Jerfov2 ID是私有的。它是在员工头文件中声明的。是否确实从输入中读取正确的值到
ID
?这可能是您的问题:从文件读取是的,它读取正确的值。如果我仅将员工文件用于此程序,我将获得正确的值结果。美德类不打印employee::readData()函数中读取的ID。是否从输入文件中读取
ID
static?@Jerfov2 ID。然后它应该显示在输入文件中。美德::readData()函数调用employee::readData()函数它从输入文件中读取ID。@Jerfov2 ID是私有的。它是在员工头文件中声明的。是否确实从输入中读取正确的值到
ID
?这可能是您的问题:从文件读取是的,它读取正确的值。如果我仅将员工文件用于此程序,我将获得正确的值结果。优点类不会打印employee::readData()函数中读取的ID。谢谢,这非常有用。谢谢,这非常有用。
#include <iostream>
#include <fstream>
#include <iomanip>
#include "employee.h"
#include "merit.h"


using namespace std;

// The definition of the members functions of the class employee goes here.

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




void employee::print(ofstream& outf) const
{
    outf << ID << setw(15) << fixed << showpoint << setprecision(2) << "$ " << sal << endl;
}
void merit::readData(ifstream& inf)
{
    employee::readData(inf);
    inf >> mer;

}



void merit::print(ofstream& outf) const
{
    outf << ID << setw(15) << fixed << showpoint << setprecision(2) << "$ " << salary << endl;
}