如何将来自ifstream的多个类的成员中的数据存储在单独的类中? 我现在倾向C++,虽然我很难理解如何用输入和输出文件流来实现程序的面向对象风格。我已经制作了一个程序,使用操作重载方法作为朋友类,尽管这显然是一种不好的做法,因为它侵犯了类的隐私

如何将来自ifstream的多个类的成员中的数据存储在单独的类中? 我现在倾向C++,虽然我很难理解如何用输入和输出文件流来实现程序的面向对象风格。我已经制作了一个程序,使用操作重载方法作为朋友类,尽管这显然是一种不好的做法,因为它侵犯了类的隐私,c++,file,oop,stream,ifstream,C++,File,Oop,Stream,Ifstream,在某些情况下,我需要制作一个程序,用于读取带有学生姓名、id、成绩日期等的csv文件。我假设该文件的读入将进入注册类。注册将有一个成员IFE;以及构造函数中指定的文件名。然后,这个类将有一个函数,这就是我被卡住的地方。我试图读入文本文件,并将文件的元素分配给对象实例的变量。例如,学生1将有3门课程/单元,每个单元将有一个等级。因此,我会为一个学生存储3个结果(在一个结果类中),然后增加到文本学生并阅读他们的课程和成绩。注意:每个学生和课程信息都在文件中的一行上 基本上,我的问题是我应该如何尝试将

在某些情况下,我需要制作一个程序,用于读取带有学生姓名、id、成绩日期等的csv文件。我假设该文件的读入将进入注册类。注册将有一个成员IFE;以及构造函数中指定的文件名。然后,这个类将有一个函数,这就是我被卡住的地方。我试图读入文本文件,并将文件的元素分配给对象实例的变量。例如,学生1将有3门课程/单元,每个单元将有一个等级。因此,我会为一个学生存储3个结果(在一个结果类中),然后增加到文本学生并阅读他们的课程和成绩。注意:每个学生和课程信息都在文件中的一行上


基本上,我的问题是我应该如何尝试将信息从文件流存储到另一个类的对象中,例如:结果类或课程类?如果我需要将数据存储在Unit类甚至Date类是Results类的聚合对象的位置,该怎么办?最初使用set和get是合乎逻辑的,但是否正确。我不是要代码,而是要更多的面向对象和文件流的最佳实践

最佳实践也是精巧的——实现
std::istream&operator>>(std::istream&,Student&)
,负责解析学生的数据。这到底是什么样子很难说。。。学生姓名可以是多个单词,可能嵌入
,甚至
-
。如果已知
id
至少包含一个数字,则可以使用该数字来区分
id
name
。您可以将带有
>
的空格分隔标记读取到
std::string
,但需要小心,因为这会跳过换行符以查找下一个字符串,因此如果您正在读取行上最后一个标记并想停在换行符处,则可能需要将
'\n'
分隔符指定到
getline
(如果您想容忍意外填充,则删除任何其他尾随空白)。如果处理新行太难,您可能想考虑使用“<代码>的外循环”(GETLINE(INPUTSURE,LINE))将整行读入<代码> STD::String Line ,然后创建<代码> STD::;并从
iss
解析单个学生的数据……这样你就可以解析到失败或“EOF”,而不用担心换行符

这种方法应该分层应用。如果你想解析日期,那么为你的
日期类创建一个
操作符>


遗憾的是,采用这种最佳实践对学习者来说可能会令人望而生畏……

一旦存储的对象类型与单一基本类型不同,我希望很明显,某种形式的类型标识最好是序列化的一部分。