Heim >Backend-Entwicklung >C++ >Wie können Sie einen virtuellen Operator implementieren?

Wie können Sie einen virtuellen Operator implementieren?

Barbara Streisand
Barbara StreisandOriginal
2024-10-26 06:57:03639Durchsuche

How Can You Implement a Virtual `operator

Den virtuellen Operator überwinden<< Rätsel

Bei dem Versuch, eine virtuelle << Operator führt der folgende Code zu einem Compilerfehler:

<code class="cpp">virtual friend ostream &amp; operator<<(ostream&amp; os,const Advertising&amp; add);</code>

Die Wurzel des Problems

Der definierte Operator<< ist eine kostenlose Funktion, die ihre Qualifikation als virtuell aufgrund des Fehlens eines Empfängerobjekts deaktiviert. Um die gewünschte virtuelle Funktionalität zu erreichen, muss der Operator als Klassenmitglied definiert werden.

Das Problem mit der direkten Definition

Operator definieren<< Als Klassenteilnehmer stellt sich ein anderes Problem dar. Die Operanden werden umgekehrt, was zu Komplikationen führt, wenn versucht wird, ein Objekt auszugeben:

<code class="cpp">MyClass myObject;
myObject << cout; // Legal but not our intended usage</code>

Die Lösung: Indirekter Ansatz

Um diese Herausforderungen zu meistern, führen Sie eine zusätzliche virtuelle ein Funktion:

<code class="cpp">class MyClass {
public:
    virtual void print(ostream&amp; where) const;
};</code>

Dann definieren Sie den Operator << neu. als kostenlose Funktion, die die neue virtuelle Funktion nutzt:

<code class="cpp">ostream&amp; operator<< (ostream&amp; out, const MyClass&amp; mc) {
    mc.print(out);
    return out;
}</code>

Dieses Setup ermöglicht es dem Bediener<< Kostenlose Funktion zur Beibehaltung der korrekten Parameterreihenfolge und gleichzeitig Ermöglichung der Anpassung des Ausgabeverhaltens in Unterklassen über die Funktion print().

Das obige ist der detaillierte Inhalt vonWie können Sie einen virtuellen Operator implementieren?. 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