Посмотрите на следующий код:
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;
}
В моем понимании, B::f() в C должен скрыть A::f(), который доведен до C с помощью-объявления; если да, то почему c.C::f() все еще вызывает A::f()?
Если c.C::f() вызывает A::f(), это должно означать, что в области C, f() всегда следует ссылаться на A::f(), это функция объявления-объявления. Тогда почему в C::test() вызов f() по-прежнему вычисляется на B::f()?