提问人:znxaz 提问时间:5/11/2023 最后编辑:user12002570znxaz 更新时间:5/11/2023 访问量:29
如何在 C++ 中使用重载运算符写入数据时防止 fstream 输出跳到 Excel 中的下一行
How to prevent fstream output from skipping to the next row in Excel when writing data using overloaded operators in C++
问:
因此,我正在使用 fstream 将数据输出到 Excel 工作表。我有一个 Base 类和一个派生类,我正在尝试使用派生类中的重写运算符输出一些数据。当我调用 Base 类中的重写运算符时,一切正常,并且我得到了预期的输出。但是,当我尝试使用派生类中的重写运算符输出其他数据时,它会跳到 Excel 工作表中的下一条记录,而不是停留在同一条记录上。
换句话说,当我真的希望该数据与 Base 类的运算符输出的数据位于同一行时,我在 Excel 工作表中为我尝试输出的其他数据获取了一行新行。
以下是 Base 类运算符的代码:
ostream& operator<<(ostream& out, const Person& P)
{
out << "First Name, Last Name, Age, Sex, Personal ID, Birthday/n";
out << P.First_Name << "," << P.Last_Name <<
"," << Page << "," << P.Sex
<< "," << P.personalID << ","
<< P.Birthday;
return out;
}
这是派生类运算符的代码:
ostream& operator<<(ostream& out, Student& S)
{
out << static_cast<Person&>(S) << "Number of Courses: " << S.numOfCourses << ",";
return out;
}
答:
0赞
463035818_is_not_an_ai
5/11/2023
#1
基类重载是糟糕的设计。它在一个方面做得太多了:它写入一个标头(包括 )并写入数据。对于 ,您需要 and 标头,然后是 和 数据。使用当前代码无法做到这一点。重构重载为:\n
Student
Person
Student
Person
Student
Person
ostream& operator<<(ostream& out, const Person& P)
{
P.writeHeader(out);
out << "\n";
P.writeData(out);
return out;
}
然后,您可以重用 和 在实现 的重载时 .Person::writeHeader
Person::writeData
Student
评论
operator<<
Student
Person