Überlastung << und >> in vererbten Klassen

Habe ich die Klasse Person (Vorname, name, Adresse, Alter) und das überladen von Operatoren << und >> um es mit filestreams:

ostream& operator<< (ostream& outStream, Person& person)
{
  ...
}

istream& operator>> (istream& inStream, Person& person)
{
  ...
}

Funktioniert es einwandfrei - ich kann Lesen und schreiben Datei problemlos, aber ich habe zwei Klassen geerbt von Person: Student und Arbeiter.

Ich schrieb das überladen von Operatoren für Sie, sehr ähnlich zu denen oben:

ostream& operator<< (ostream& outStream, Worker& worker)
{
 ...
}

istream& operator>> (istream& inStream, Worker& worker)
{
 ...
}


ostream& operator<< (ostream& outStream, Student& student)
{
 ...
}

istream& operator>> (istream& inStream, Student& student)
{
 ...
}

Einzige Unterschied sind zwei weitere Felder in jeder Klasse. Das problem ist, das wenn ich das überladen von Operatoren, die entweder mit Studenten oder Arbeitnehmer-es scheint, mein compiler verwendet Operatoren, für die person. Wahrscheinlich macht es versteckte Umwandlung von Student oder Arbeiter zu Person, aber als Ergebnis gibt es keine solche zusätzliche Felder in die Datei geschrieben.
offstream << Menschen funktioniert das genauso wie offstream << Studenten oder offstrem Arbeitnehmer.
Vielleicht platzieren überladen von Operatoren Deklarationen für vererbte Klassen, die erste, und für die Person, die später im code würde das Problem auch lösen, aber ich finde es nicht eine elegante Lösung.

Wenn Sie haben einige Ideen, wie die Verwaltung mit dem problem oben, würde ich schätzen.

  • Dies ist wahrscheinlich ein problem mit dem code, wo Sie anrufen << und >>. Kannst du etwas code im umliegenden Bereich?
InformationsquelleAutor Phil | 2010-11-12
Schreibe einen Kommentar