struct B {
void foo () {}
};
struct D : B {
using B::foo;
static void foo () {}
};
int main ()
{
D obj;
obj.foo(); // calls D::foo() !?
}
成员方法和static
成员方法有两个完全不同的原因:
static
方法不会覆盖基本class
中的虚函数- 两种情况下的函数指针签名是不同的
当一个方法由对象调用时,逻辑上成员方法应该具有更高的优先级吗?(只是C++允许使用对象调用static
方法, 这是否被认为是被覆盖的方法?)
dot
调用。从这一点开始,隐藏 是必须的,否则在基类中引入foo
可能会破坏所有客户端代码。 - Matthieu M.