看看下面的代码:
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()
?