父类和子类中文件 I/O 的 C++ 问题

标签 c++ io polymorphism parent-child

我有一项编程任务,我被困在最后一部分。我需要从 .txt 文件中读取输入。父类是火车车厢,子类是油 jar 车和厢式车厢,每个类都有一个 readData 类函数。

这是来自 .txt 的示例输入:

T
T001
3/14/14
F
1550

第一行区分了棚车和油 jar 车,我的 main() 处理得很好。接下来读入的两行是序列号和维修日期。最后两行由油 jar 车子类 readData 函数处理。我需要帮助来读取序列号和日期。

bool RRCar::ReadData(istream& input)
{
    string date, serial;

    if (input.good())
    {
        getline(input, serial, '\n');
        RRCar::SetSerial(serial);
        getline(input, date, '\n');
        RRCar::SetServiceDate(date);
        return true;
    }
    else
        return false;
}

为什么没有正确读取数据?此外,这里是 setter :

void RRCar::SetSerial(const string& NewSerial)
{
    serialNum = NewSerial;
}

void RRCar::SetServiceDate(const string& NewDate)
{
    serviceDate = NewDate;
}

感谢您提供的所有帮助。

最佳答案

我相当确定您唯一的问题是您没有跳过第一行。如果您的文本文件使用换行符分隔并且您使用的是 getline,则无需指定分隔符(默认为换行符(see reference)但您确实需要遍历第一行(您不需要需要在这个函数中)。

然后我们有:

bool RRCar::ReadData(istream& input)
{
    string date, serial;

    if (input.good())
    {
        getline(input, serial); //Dummy call
        getline(input, serial);

        //Check to see if stream is still good, ie no eofbit, failbit, badbit flags set for input
        if( input.good() ) 
            RRCar::SetSerial(serial);

        getline(input, date)

        if( input.good() ) 
            RRCar::SetServiceDate(date);

        return true;
    }
    else
        return false;
}

serialNumserviceDate 现在应该包含正确的值。

根据我的输入:

T
T001
3/14/14
F
1550

我得到了一个最终状态: serialNum = T001serviceDate = 3/14/14

关于父类和子类中文件 I/O 的 C++ 问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22865872/

相关文章:

c++ - 模板化基类还有一个共同的基类指针?

C++ throw 类成员

c# - 在 C# 中解析带有标题的 CSV 文件

python - 从 ROSbag 中提取数据

java - 扫描仪在使用 next() 或 nextFoo() 后跳过 nextLine()?

xsd 选择覆盖

c++ - 如何在二维 vector 的定义位置插入一个 vector ?

c++ - 如何解码caffemodel中的权重并转发图像?

c++ - 在 Qt 中将结构传递给信号

c# - 这是使用多态性的正确方法吗