Angenommen, ich habe einen Code wie diesen:
%Vor% Wenn ich ein Objekt vom Typ Concrete habe, warum kann ich Foo (int) nicht aufrufen?
Wenn ich den Namen von Foo (double) ändere, so dass es Foo nicht überlädt, dann ist alles in Ordnung und beide Methoden sind zugänglich, aber das will ich nicht.
Ähnlich, wenn ich die Concrete-Klasse entferne und Foo (Double) in Derived implementiere, dann sind beide zugänglich, aber wiederum nicht das, was ich will.
Die Suche nach Namen findet vor der Überladungsauflösung statt. Wenn also Foo
in Concrete
gefunden wurde, werden Basisklassen nicht nach anderen Methoden namens Foo
gesucht. int Foo(int)
in Derived
ist versteckt durch Foo
in Concrete
.
Sie haben eine Reihe von Optionen.
Ändern Sie den Aufruf, um explizit zu sein.
%Vor%Fügen Sie eine Verwendungsdeklaration zu Concrete hinzu.
%Vor%Rufen Sie die Funktion über eine Basisreferenz auf.
%Vor% Foo(double)
blendet die Funktion von Ihrer Basis aus. Sie können es jedoch sichtbar machen:
Tags und Links c++ inheritance method-overloading