小编Phi*_*hil的帖子

在继承的类中重载<<和>>

我有类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解决问题,但我不认为它是一个优雅的解决方案.

如果您有一些想法如何解决上述问题,我将不胜感激.

c++ inheritance overloading operators

3
推荐指数
1
解决办法
6011
查看次数

标签 统计

c++ ×1

inheritance ×1

operators ×1

overloading ×1