为什么在C ++中这样做是为了让编译器忘记"关于其他具有相同名称但不同参数的方法,如果覆盖其中一种方法?
struct A {
void virtual f() {}
void virtual f(int) {}
void testA() {f(); f(1);} // OK
};
struct B : public A {
void f() override {}
void testB() {f(); f(1);} // Error
};
这似乎是毫无意义的行为......不是吗?
答案 0 :(得分:2)
但你可以添加一个using语句来使所有A :: f方法可见,类似于:
struct B : public A {
using A::f;
void f() override {}
void testB() {f(); f(1);} // No Error
};
答案 1 :(得分:1)
当您覆盖子类中的成员函数时,您隐藏父类的名称,它只是语言的工作方式。如果你想使用父类中的函数,你必须明确,例如A::f(1)
。