Heim >Backend-Entwicklung >C++ >Können Sie das machen?
Überladung virtueller Operatoren: << Virtuell
Versuch, ein virtuelles << Der Operator führt aufgrund der Natur freier Funktionen zu Compilerfehlern. Um diese Einschränkung zu überwinden und virtuelles Verhalten für benutzerdefinierte Operatorüberladungen zu ermöglichen, ist ein alternativer Ansatz erforderlich.
Umwandeln des Operators in eine Mitgliedsfunktion
Der Schlüssel zur Einführung von virtuellem Verhalten liegt in der Umwandlung des << Operator von einer freien Funktion zu einer Mitgliedsfunktion der Klasse. Wenn Sie dies jedoch direkt tun würden, würde sich die Parameterreihenfolge umkehren, was zu einer falschen Operandenplatzierung führen würde.
Einführung in die Indirektion: Die Print()-Funktion
Um dieses Problem zu lösen, müssen Sie die Grundlagen Der Satz des Software Engineering schlägt das Hinzufügen einer Zwischenschicht der Indirektion vor. Anstatt << virtual, eine virtuelle print()-Funktion wird der Klasse hinzugefügt:
<code class="cpp">class MyClass { public: virtual void print(ostream& where) const; };</code>
Redirecting << to print()
Das << Die freie Funktion wird dann neu definiert, um ihr Verhalten an print() zu delegieren:
<code class="cpp">ostream& operator<<(ostream& out, const MyClass& mc) { mc.print(out); return out; }</code>
Virtuelles Verhalten erreichen
Mit diesem Setup wird das << Der Operator behält die korrekte Parameterreihenfolge bei und ermöglicht gleichzeitig Unterklassen, die print()-Methode zu überschreiben und ihr Ausgabeverhalten anzupassen. Dies ermöglicht effektiv virtuelles Verhalten für die << Operator, der dynamischen Polymorphismus beim Ausgabe-Streaming ermöglicht.
Das obige ist der detaillierte Inhalt vonKönnen Sie das machen?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!