Wie kann ich rein virtuelle Funktion zu einem Operator machen + (); Funktion. wheh ich mag das in der Basisklasse int Operator + () = 0; Compiler gibt Fehler. in abgeleiteten Klasse Operator + () -Funktion Compiler sagen, dass die Klasse abzuleiten nicht möglich ist. weil der folgende Kurs abstrakt ist Ich weiß, dass ich kein Objekt von abstrakten Klassen erstellen kann, aber jetzt versuche ich, ein abgeleitetes Klassenobjekt zu erstellen.
Hier ist der Code
%Vor%Ihre vagen Erwähnungen von Code sind im Wesentlichen unmöglich zu folgen. Beantworten Sie Ihre Frage "Wie kann ich rein virtuelle Funktion ein Operator + (); Funktion", gibt es absolut kein Geheimnis, z. Betrachten Sie das folgende triviale Programm:
%Vor% Dies kompiliert und läuft gut und gibt 23
wie erwartet aus. Was auch immer es ist, dass Sie falsch arbeiten, es muss daher natürlich anders sein (und wahrscheinlich nicht mit dem spezifischen Problem einer Überlastung des Operators verbunden sein, rein virtuell zu sein).
Bearbeiten : (Wie in den Kommentaren, hinzugefügt const
zu der Methode nur für den Fall, dass Sie es mit const base&
nennen möchten - beachten Sie, dass andere Antworten auch diese% co_de weggelassen haben %, und auch pro Kommentar):
Wenn Sie auch const
verwenden möchten, fügen Sie einfach eine eigenständige Funktion für diesen Zweck hinzu, sagen Sie kurz vor 15 + b
:
Wenn Sie nach einer Standardoperator + () Implementierung suchen, dann ist das leider unmöglich:
%Vor%Dieser Code kann nicht kompiliert werden, da der Compiler keine abstrakte X-Klasse nach Wert zurückgeben kann.
Ich sehe zwei Probleme, die Sie angehen oder zumindest besser verstehen sollten. Sie laufen beide darauf hinaus, dass Sie die reine virtuelle Deklaration in Ihrer Basisklasse ana
:
1) operator + (): Ihre Klasse baba
definiert einen anderen Operator + als die Basisklasse. Insbesondere ist ana::operator+()
ein unärer + Operator (akzeptiert nur einen Operanden), während baba::operator+(baba& ali)
ein binärer Operator (akzeptiert zwei Operanden) auf baba
ist. Sie müssen entscheiden, was Sie verwenden und verwenden möchten. Wenn Sie das binäre + verwenden möchten (was Ihre Definition in baba
ist, was ich denke, Sie wollen) dann deklarieren Sie in ana
:
und in baba
:
Warum dies eine rein virtuelle Methode in ana
sein muss, da x
in% definiert ist co_de% ist neugierig. Es wird interessante Dinge tun, wenn Sie andere abgeleitete Klassen haben, die die Dinge anders machen (Verlust der Kommutativität wird wahrscheinlich resultieren). Aber ich erwarte, dass du deine Gründe hast, also werde ich nicht weiter nachfragen.
2) operator = (ana & amp;): Sie haben auch ein Problem mit den Deklarationen des Zuweisungsoperators. Auch hier lösen Sie das reine virtuelle nicht auf. In ana
haben Sie:
ana
während in virtual void operator=(ana&)=0;
Sie haben: baba
. Die Argumente sind unterschiedlich, da void operator=(baba &ali)
nicht dasselbe ist wie baba&
; also ist die reine virtuelle Deklaration wieder nicht gelöst. Um dies zu beheben, möchten Sie wahrscheinlich die Deklaration in ana&
zu:
und in ana
:
Ich habe ähnliche Bedenken, warum Sie dies als rein virtuell deklarieren wollen, da es wiederum annimmt, dass verschiedene abgeleitete Klassen es anders implementieren, was zu einem interessanten Verhalten führt. Ich bin sicher, du hast deine Gründe.
Ich hoffe, das hilft.
Die Syntax für eine reine virtuelle Funktion wäre etwa:
%Vor% Beachten Sie jedoch, dass Sie dies nur selten tun möchten - normalerweise möchten Sie eine Überladung von operator+
als freie Funktion implementieren, um die Konvertierung des linken Operanden (falls erforderlich) zu ermöglichen.
Tags und Links c++ abstract-class operator-overloading polymorphism