Betrachten Sie den Code:
%Vor% Wenn ich A::g()
virtual mache, gibt es "Call from B" aus.
Ich verstand immer "virtuell" nützlich, wenn wir wollen, dass eine Schnittstelle Polymorphie erlaubt, sagen wir A *a = new B(); a->f()
, aber dieses Beispiel zeigt an, dass virtual
auch in dieser Situation benötigt wird. Mein Verständnis dieses Beispiels ist, dass der Aufruf g()
auf A::f
formell äquivalent zu this->g()
ist, und dies ist ein Zeiger.
Allerdings wollte ich das nicht wirklich: In meinem Beispiel habe ich eine allgemeine Template-Klasse A mit einer allgemeinen Methode A::simulate
(zB A::f
), die verschiedene Methoden verwendet (zB A::g()
), einige davon werden durch die Unterklasse überschrieben (zB B
). Was ich wollte, war, die Methode A::simulate
so zu haben, dass der Code in den Unterklassen von A so kompiliert würde, als wäre er in den Unterklassen definiert worden, so dass ich nicht dieselbe mehrfache Logik habe. Wie kann ich das tun?
Dies liegt daran, dass meine Schnittstelle keinen Polymorphismus erfordert, da der Benutzer den Code immer kompilieren muss (d. h. nur Header).
Tags und Links c++