Der Grund warum hat mit der Art zu tun, in der C ++ Namen sucht und die Auflösung überlädt. C ++ beginnt mit dem Ausdruckstyp und sucht nach oben, bis ein Element gefunden wird, das dem angegebenen Namen entspricht. Es berücksichtigt dann nur Überladungen des Members mit diesem Namen im ermittelten Typ. Daher werden in diesem Szenario nur foo
-Methoden berücksichtigt, die in B
deklariert wurden und daher die Überladung nicht gefunden werden kann.
Am einfachsten ist es, using A::foo
in class B
hinzuzufügen, damit der Compiler auch diese Überladungen berücksichtigt.
Die Überschreibung in Klasse B verbirgt die Methoden der Klasse A mit dem gleichen Namen. (Haben Sie Compiler-Warnungen? Die meisten Compiler warnen vor versteckten virtuellen Methoden.)
Um dies zu vermeiden, fügen Sie
hinzu %Vor% zu Klasse B (in welcher public
/ protected
/ private
-Abschnitt ist angemessen).
Tags und Links c++ inheritance