iam*_*ind 11 c++ static-methods overriding language-lawyer
struct B {
void foo () {}
};
struct D : B {
using B::foo;
static void foo () {}
};
int main ()
{
D obj;
obj.foo(); // calls D::foo() !?
}
Run Code Online (Sandbox Code Playgroud)
成员方法和static成员方法完全不同有两个原因:
static 方法不会覆盖base中的虚函数 class当一个方法被一个对象调用时,成员方法逻辑上不应该有更高的偏好吗?(只是C++允许static使用对象调用方法,它会被视为重写方法吗?)
您所看到的规则在ISO/IEC 14882:2003 7.3.3 [namespace.udecl]/12中描述:
当using声明将基类中的名称带入派生类范围时,派生类中的成员函数会覆盖和/或隐藏基类中具有相同名称和参数类型的成员函数(而不是冲突).
如果没有这个规则,函数调用将是不明确的.
| 归档时间: |
|
| 查看次数: |
3317 次 |
| 最近记录: |