【发布时间】:2015-04-11 12:37:38
【问题描述】:
看看下面的代码:
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;
}
根据我的理解,C 中的 B::f() 应该隐藏 A::f() 通过 using-declaration 带到 C;如果是这样,那为什么c.C::f() 仍然调用A::f()?
如果c.C::f()调用A::f(),那应该是在C的范围内,f()应该总是引用A::f(),这就是using-declaration的作用。那为什么在C::test() 中,对f() 的调用仍然被评估为B::f()?
【问题讨论】:
标签: c++ using-declaration