Посмотрите на следующий код:
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()
?