einen Blick auf den folgenden Code haben:using-Deklaration in abgeleiteten Klasse nicht verstecken gleiche Funktion, die von der Basisklasse
struct A {
public:
virtual void f(){std::cout << "in A";};
};
struct B : A{
public:
virtual void f(){std::cout << "in B";};
int a;
};
struct C : B{
using A::f;
void test(){f();}
};
int main()
{
C c;
c.f(); // calls B::f, the final overrider
c.C::f(); // calls A::f because of the using-declaration
c.test(); //calls B::f
return 0;
}
Per mein Verständnis, das B::f()
in C
sollte die A::f()
verstecken, die C
gebracht wird durch Verwendung der Deklaration; Wenn ja, warum ruft c.C::f()
immer noch A::f()
?
Wenn c.C::f()
Anrufe A::f()
, dass die im Rahmen der C
bedeuten sollte, sollte f()
immer A::f()
beziehen werden, ist dies die Funktion der using-Deklaration. Warum wird dann in der C::test()
der Anruf an f()
immer noch auf B::f()
ausgewertet?
@LiuNick Hinzugefügt. – Angew
nur so professionell! Vielen Dank! –
@LiuNick Der Stack Overflow Weg zu sagen "Danke" ist zu [akzeptieren die Antwort, die das Problem gelöst] (http://stackoverflow.com/help/someone-answers) (höchstens eine akzeptierte Antwort pro Frage).Dies markiert die Frage als gelöst und gibt sowohl dem Antworter als auch Ihnen einen gewissen Ruf. – Angew