Heim > Backend-Entwicklung > C++ > Hauptteil

Warum kann ich den „Operator' nicht erstellen?

Mary-Kate Olsen
Freigeben: 2024-10-26 09:22:29
Original
565 Leute haben es durchsucht

Why Can't I Make the `operator

Implementierung eines virtuellen Operators<<

Die Notwendigkeit eines virtuellen Operators<< entsteht, wenn das Verhalten des Streaming-Operators für verschiedene Klassen angepasst wird. Versuche, den Operator als virtuell zu definieren, führen oft zu dem Fehler „Operator <<: Nur Mitgliedsfunktionen und Basen können virtuell sein.“

Das Dilemma der freien Funktionen

Das Problem entsteht, weil der Operator<< wird typischerweise als freie Funktion definiert, die kein Empfängerobjekt hat und nicht virtuell sein kann. Wenn Sie den Operator hingegen als Mitgliedsfunktion definieren, wird die Reihenfolge der Parameter umgekehrt, was zu einem Kompilierungsfehler führt.

Eine Lösung über Indirektion

Um dieses Dilemma zu lösen, Erwägen Sie das Hinzufügen einer virtuellen Member-Funktion, die das gewünschte Ausgabeverhalten kapselt:

<code class="cpp">class MyClass {
public:
    virtual void print(ostream& out) const; // Virtual output function
};</code>
Nach dem Login kopieren

Benutzerdefinierter Operator mit virtuellem Verhalten

Wenn die virtuelle Member-Funktion vorhanden ist, können Sie definieren der Operator<< als freie Funktion, die an die Druckfunktion delegiert:

<code class="cpp">ostream& operator<<(ostream& out, const MyClass& mc) {
    mc.print(out); // Calls the virtual print function
    return out;
}</code>
Nach dem Login kopieren

Dieser Ansatz behält die korrekte Parameterreihenfolge für den Operator bei<< freie Funktion und ermöglicht gleichzeitig die Anpassung des Ausgabeverhaltens über die virtuelle Memberfunktion. Unterklassen können die Druckfunktion überschreiben, um ihre eigene benutzerdefinierte Ausgabeformatierung zu implementieren.

Das obige ist der detaillierte Inhalt vonWarum kann ich den „Operator' nicht erstellen?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage