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 & operator<<(ostream& os,const Advertising& 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& where) const; };</code>
Dann definieren Sie den Operator << neu. als kostenlose Funktion, die die neue virtuelle Funktion nutzt:
<code class="cpp">ostream& operator<< (ostream& out, const MyClass& 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!