2017-11-16 6 views
-3

Ich habe ein Programm in c++, das diesen Operator >> überlastet. Dieser Operator ist dafür zuständig, nach einer Texteingabe zu fragen cin >> Meine Frage ist, was ich zu tun habe, falls ich denselben Operator aber für einen ifstream Eintrag verwenden muss.Über die Überlastung des Bedieners

mit Code EDITED

istream & operator >> (istream & Read, Person & ObjPers) { 
     cout << "\ n \ n Enter name of Person:"; 
     Lee >> ObjPers.NomPers; 
     cout << "\ n \ n Enter year of birth:"; 
     Read >> ObjPers.AnioNac; 
     cout << "\ n \ nEnter place of birth:"; 
     Read >> ObjPers.LugNac; 
     cout << "\ n \ nIs it alive ?:"; 
     Read >> ObjPers.Vive; 
     return Read; 
} 

Wenn ich den gleichen Operator verwenden müssen jedoch mit einer anderen Verwendung als ifstream >> variable Was ich tun muss?

EDIT2:

Wenn ich Ostream Überlastung < < dies geschieht:

ostream & operator << (ostream & Write, Persona & ObjPers) { 
    Write << "\ n \ nData of the Person \ n"; 
    Type << "\ nName:" << ObjPers.NomPers; 
    Write << "\ nPlace of birth:" << ObjPers.LugNac; 
    Write << "\ nYear of birth:" << ObjPers.AnioNac; 
    if (ObjPers.live == 1) 
    Write << "\ nIt is alive. \ N"; 
    else 
    Write << "\ nNot alive. \ N"; 
         return Write; 

    } 

ich, wenn ich versuche mit < < Operator verwenden ofstream Ich kann nicht die überladenen Operator läuft zunächst

void BinaryTree <T> :: Save (NodeTree <T> * p, ofstream & out) 
{ 
     if (p) { 

        Save (p-> Sonleft, out); 
         exit << p-> Info; 

        Save (p-> SonRigth, out); 

     } 
     cout << endl; 

} 
+0

Lassen Sie uns Ihren Code sehen. – PaulMcKenzie

+0

Normalerweise nichts. Ein Stream ist ein Stream. – user4581301

+0

Ich bearbeite den Beitrag mit einem Code –

Antwort

0

Wenn Sie die operator>> Funktion implementieren,

  1. Verwenden Sie nicht std::cin oder std::cout in seiner Implementierung.
  2. Angenommen, der Benutzer weiß, was er für ein solches Objekt eingeben soll.
  3. Verwenden Sie vollständig qualifizierte Namen für istream, d. H. Verwenden Sie std::istream& Read anstelle von istream& Read.

Mein Vorschlag für Ihre Funktion:

std::istream& operator>>(std::istream& in, Person & ObjPers) { 
    in >> ObjPers.NomPers; 
    in >> ObjPers.AnioNac; 
    in >> ObjPers.LugNac; 
    in >> ObjPers.Vive; 
    return in; 
} 

oder kombinieren, um die Aussagen zu einem:

std::istream& operator>>(std::istream& in, Person & ObjPers) { 
    return (in >> ObjPers.NomPers 
       >> ObjPers.AnioNac 
       >> ObjPers.LugNac 
       >> ObjPers.Vive); 
} 
+0

Das Problem ist, dass, wenn ich versuche, ifstream mit dem gleichen Operator >> die Überladung ausgeführt wird –

+0

@MarcoLeslie, Sie machen es klingt wie das ist ein Nachteil. Aus meiner Sicht wird das erwartet und ist gut. –

+0

Es ist ein Problem, weil ich aus einer Datei lesen muss und wenn ich versuche, meinen Programmabsturz zu lesen, weil die Überladung –

Verwandte Themen