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?
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.
Tags und Links c++ inheritance polymorphism operators