Gibt es etwas im C++ - Standard, das mich daran hindert, die Superklassenfunktion zu überlasten?Die Superklassenfunktion überladen
Beginnend mit diesem Paar Klassen:
class A { // super class
int x;
public:
void foo (int y) {x = y;} // original definition
};
class B : public A { // derived class
int x2;
public:
void foo (int y, int z) {x2 = y + z;} // overloaded
};
ich B::foo()
leicht anrufen:
B b;
b.foo (1, 2); // [1]
Aber wenn ich versuche, A::foo()
zu nennen ...
B b;
b.foo (12); // [2]
.. Ich erhalte einen Compilerfehler:
test.cpp: In function 'void bar()':
test.cpp:18: error: no matching function for call to 'B::foo(int)'
test.cpp:12: note: candidates are: void B::foo(int, int)
Nur um sicherzustellen, dass ich nicht etwas fehlte, ich den Namen B
‚s-Funktion geändert, so dass es keine Überlastung:
class B : public A {
int x2;
public:
void stuff (int y, int z) {x2 = y + z;} // unique name
};
Und jetzt kann ich A::foo()
das zweite Beispiel mit Aufruf .
Ist dieser Standard? Ich benutze g ++.
, um die ursprüngliche Elementfunktion "auszublenden". –
+1 - beachten Sie, dass dies in Scott Meyers 'Effektives C++ Item 33 (ausführlicher) behandelt wird: Vermeiden Sie es, vererbte Namen zu verstecken. –