Überladen einer Methode in einer Unterklasse in C ++

8

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.

    
James 14.11.2009, 17:13
quelle

2 Antworten

14

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%     
Charles Bailey 14.11.2009, 17:17
quelle
6

Foo(double) blendet die Funktion von Ihrer Basis aus. Sie können es jedoch sichtbar machen:

%Vor%     
Georg Fritzsche 14.11.2009 17:16
quelle