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

Wie können Sie einen virtuellen Operator implementieren?

Barbara Streisand
Freigeben: 2024-10-26 06:57:03
Original
664 Leute haben es durchsucht

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>
Nach dem Login kopieren

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>
Nach dem Login kopieren

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>
Nach dem Login kopieren

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>
Nach dem Login kopieren

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!

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