Heim  >  Artikel  >  Backend-Entwicklung  >  Können Sie das machen?

Können Sie das machen?

Linda Hamilton
Linda HamiltonOriginal
2024-10-27 05:39:02291Durchsuche

 Can You Make the `

Ü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!

Stellungnahme:
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