У меня есть класс Person (имя, фамилия, адрес, возраст) и перегруженные операторы << и >>, чтобы использовать его с файловыми потоками:
ostream& operator<< (ostream& outStream, Person& person)
{
...
}
istream& operator>> (istream& inStream, Person& person)
{
...
}
Работает нормально - я могу читать из илегко записывать в файл, но я добавил два класса, унаследованных от 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)
{
...
}
Разница только в том,еще два поля в каждом классе.Проблема в том, что, когда я использую перегруженные операторы со студентом или рабочим, кажется, что мой компилятор использует операторы для человека.Возможно, он делает скрытое преобразование из ученика или работника в личность, но в результате в файл не записываются эти дополнительные поля.offstream << Люди работают так же, как offstream << Студенты или внешние рабочие.Возможно, размещение объявлений перегруженных операторов сначала для унаследованных классов, а для Person позже в коде решит проблему, но я не нахожу это элегантным решением. </p>
Если у вас есть идеи, как справиться с проблемойвыше, я был бы признателен.