继承重载函数:需要命名空间吗?

时间:2013-10-28 06:22:40

标签: c++ inheritance overloading

如果我在基类中有一个重载函数,为什么我需要为我没有重新实现的所有重载副本声明基类的命名空间(假设我已经重新实现了至少一个)。例如,请考虑以下代码:

#include <iostream>


class Base {
protected:
    int bar;

public:
    Base() : bar(0) {}
    virtual void Bar(int b) { bar = b; }
    virtual int Bar() { return bar; }
};

class Foo : public Base {
protected:
    int extraBar;

public:
    //virtual void Bar(int b) { extraBar = b; }  //Uncomment
};

int main() {

    Foo T;

    std::cout << T.Base::Bar() << std::endl;
    std::cout << T.Bar() << std::endl; //will cause code to not compile

    return 0;
}

有一个简单的方法吗?我必须手动修改几行代码,因为我有

 func()
 func(var)
 func(var, var, var)

和var永远不是一回事,所以在func(var)上查找和替换不会很好。

1 个答案:

答案 0 :(得分:3)

你可以简单地这样做

using Base::Bar;
Foo课程中

。如果没有Bar,编译器将找不到using,因为它被Foo::Bar函数隐藏。

名称可以通过嵌套声明性区域中的相同名称的显式声明或派生来隐藏 类