Überladen von Operatoren und geerbten Klassen

8

Ich habe eine Basisklasse und dann mehrere abgeleitete Klassen. Ich möchte das "& lt; & lt;" Operator für diese abgeleiteten Klassen. Für normale Operatoren, d.h. "+", machen virtuelle Funktionen den Trick. Was ich als Standardkonvention verstehe, ist das Deklarieren von

%Vor%

innerhalb meiner Klasse und dann definieren Sie die Funktion nach der Klasse. A priori würde ich denken, das Hinzufügen von virtuell zu der obigen Definition würde es funktionieren lassen, aber nach einigem Nachdenken (und Fehlern von meinem Compiler) merke ich, dass das nicht viel Sinn ergibt.

Ich habe einen anderen Test in einem Testfall versucht, bei dem alle Teilnehmer öffentlich sind. Zum Beispiel:

%Vor%

In gewisser Weise ist das also "polymorphism gone bad" - der Basisklassenoperator & lt; & lt; wird eher als der abgeleitete Klassenoperator aufgerufen. Im obigen Beispiel, wie mache ich den richtigen Operator für die abgeleitete Klasse aufgerufen werden? Und generell: Wenn meine Klasse private Mitglieder hat, die ich schützen möchte, wie kann ich die Überlastung des Operators korrigieren, während ich das Friend-Schlüsselwort verwende?

    
andyInCambridge 07.10.2011, 17:33
quelle

4 Antworten

6

Sie können eine virtuelle Hilfsfunktion verwenden. Hier ist ein völlig ungetestetes Beispiel, also entschuldigen Sie Syntaxfehler:

%Vor%

Bearbeiten: Bereinigt um @Onmifarious Vorschläge.

    
Oscar Korz 07.10.2011, 17:36
quelle
2

Normalerweise erstellen Sie einfach eine polymorphe print -Methode in der Basisklasse, die von einer einzigen freien Freundfunktion aufgerufen wird.

    
Mark B 07.10.2011 17:36
quelle
1

Machen Sie operator<< zu einer freien Funktion, die den Aufruf an eine virtual -Methode der Klasse Foo weiterleitet.

Sehen Sie es in Aktion .

    
Jon 07.10.2011 17:36
quelle
1

Mit den richtigen Code-Korrekturen funktioniert Ihr -Code einwandfrei; nichts zu tun :

%Vor%

Demo . Um auf private -Member zuzugreifen, können Sie diese Funktion als friend in der gewünschten class festlegen.

    
iammilind 07.10.2011 17:41
quelle