Frage

Um den Einsatz cout als solche: std :: cout << myObject, warum muss ich ein ostream-Objekt übergeben? Ich dachte, das war ein impliziter Parameter.

ostream &operator<<(ostream &out, const myClass &o) {

    out << o.fname << " " << o.lname;
    return out;
}

Danke

War es hilfreich?

Lösung

Sie fügen es kein anderes Mitglied Funktion ostream, da diese die Klasse neu definiert erfordern würde. Sie können es auf myClass nicht hinzufügen, da die ostream erste geht. Das einzige, was Sie tun können, ist eine Überlastung an eine unabhängige Funktion hinzuzufügen, das ist, was Sie im Beispiel tun.

Andere Tipps

Nur wenn es sich um eine Memberfunktion der Klasse ist, die ansonsten das erste Argument wäre. So wäre es:

class ostream {
    ...
    ostream &operator << (const myClass &o);
    ...
};

Da ostream geschrieben wurde lange vor Ihrer Klasse finden Sie das Problem Ihre Klasse in dorthin zu gelangen. Daher müssen wir den Bediener als freistehende Funktion implementieren:

(return type) operator << ( (left hand side), (right hand side) );

Wenn sie Personen als Mitglied-Funktionen von Klassen implementiert werden, ist die linke Seite this, und das Argument wird die rechte Seite. (Für binäre Operatoren - unäre Operatoren arbeiten in ähnlicher Weise.)

Weil Sie eine freie Funktion überlasten, kein Mitglied Funktion.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top