当我覆盖其中一个其他重载时,为什么没有被重写的重载函数被继承?

时间:2014-05-06 02:54:51

标签: c++ visual-c++ inheritance override overloading

快六次说...为什么不在MSVC 2010中编译?

class A {
public:
    void foo(int a, int b) { };
    void foo(int a) { };
};
class B: public A {
public:
    void foo(int a, int b) { }; // <-- comment this out to compile
};

int main(int argc, char* argv[])
{
    B b;
    b.foo(1); // <-- doesn't compile... shouldn't B just inherit this overload?
}

1 个答案:

答案 0 :(得分:1)

覆盖时,覆盖名称,而不是特定的重载。所以它隐藏了基类的所有重载。要解决这个问题,您可以将using A::foo;放在派生类中,以将重载降低到B