看看下面的代码:
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()inC应该隐藏using-declarationA::f()带来的内容;C如果是这样,那为什么c.C::f()还要打电话A::f()?
如果c.C::f()调用A::f(),那应该意味着在 的范围内C,f()应该总是引用A::f(),这是 using-declaration 的功能。那么为什么在C::test(), call tof()仍然被评估到B::f()?