我有类Person(名字,姓氏,地址,年龄)和重载运算符<<和>>来与文件流一起使用:
ostream& operator<< (ostream& outStream, Person& person)
{
...
}
istream& operator>> (istream& inStream, Person& person)
{
...
}
Run Code Online (Sandbox Code Playgroud)
它工作正常 - 我可以轻松地读取和写入文件,但我添加了两个继承自Person:Student和Worker的类.
我为他们编写了重载操作符,与上面的操作符非常相似:
ostream& operator<< (ostream& outStream, Worker& worker)
{
...
}
istream& operator>> (istream& inStream, Worker& worker)
{
...
}
ostream& operator<< (ostream& outStream, Student& student)
{
...
}
istream& operator>> (istream& inStream, Student& student)
{
...
}
Run Code Online (Sandbox Code Playgroud)
唯一不同的是每个班级还有两个字段.问题是,当我使用Student或Worker重载运算符时,我的编译器似乎使用运算符.可能它会从Student或Worker到Person进行隐藏转换,但结果是没有写入该文件的其他字段.offstream <<人们的工作与流出的<<学生或外来工人一样.也许首先为继承的类放置重载的运算符声明,然后在代码中为Person解决问题,但我不认为它是一个优雅的解决方案.
如果您有一些想法如何解决上述问题,我将不胜感激.