So funktioniert die Sprache. Vor dem Schlüsselwort, wenn Sie eine überladene Funktion overrode, musste man sie zu überlasten alle:
class bar : public foo
{
public:
bar(void);
~bar(void);
a(int);
a(double d) { foo::a(d); } // add this
}
Das ärgerte genug Leute, dass die Sprache Komitee der mit Funktion hinzugefügt, aber einige alte Gewohnheiten sterben schwer ; und die Habitués & Dolch; habe ein gutes Argument.
Wie James Hopkins darauf hinweist, indem er unter Verwendung hinzufügt, drückt der Programmierer die Absicht aus, dass die abgeleitete Klasse, ohne Warnung, zukünftige Überschreibungen von foo :: a() zu ihrer Liste akzeptabler Signaturen hinzufügt. Hier
ist ein Beispiel dessen, was er beschreibt: „Abgeleitet :: Double“
#include <iostream>
class Base {
public:
virtual void f(double){ std::cout << "Base::Double!" << std::endl; }
// virtual void f(int) { std::cout << "Base::Int!" << std::endl; } // (1)
virtual ~Base() {}
};
class Derived : public Base {
public:
// using Base::f; // (2)
void f(double) { std::cout << "Derived::Double!" << std::endl; }
};
int main(int, char **) {
Derived d;
d.f(21);
return 0;
}
Der Ausgang wird weil der Compiler das Integer-Argument zu einem Double hochstufen wird. g ++ 4.0.1 -Wall wird nicht warnen, dass diese Aktion stattgefunden hat.
Uncomment (1), um eine zukünftige Änderung zu Base zu simulieren, indem die Methode Base :: f (int) hinzugefügt wird. Der Code kompiliert, wiederum ohne Warnung auch mit -Wall, und "Abgeleitet :: Double!" bleibt der Ausgang.
Entkommen Sie jetzt auskommentieren (2), um eine Entscheidung vom Abgeleiteten Programmierer zu simulieren, um alle Unterschriften :: f Signaturen einzuschließen. Der Code kompiliert (ohne Warnungen), aber die Ausgabe ist jetzt "Base :: Int!".
—
& Dolch; Ich kann mir kein englisches Wort für "diejenigen, die die Angewohnheit haben" vorstellen, und "süchtig" ist viel zu stark.
Es würde helfen, wenn Sie (wenn möglich) tatsächlichen Code gepostet. Der Code, den Sie gepostet haben, fehlen einige Details, wie Semikolons nach Klassendefinitionen und der Rückgabetyp für 'a' in' bar' ... –
Ich kann den eigentlichen Code nicht posten. Ich fügte die Details in den Beitrag ein, dies war nicht wirklich eine Übung in Syntax. – Greg
http://stackoverflow.com/questions/72010/c-overload-resolution –