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



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

#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) 上查找和替换不会那么好。

你可以简单地这样做

using Base::Bar;

Foo编译器不会找到没有参数Bar,没有using,因为它被Foo::Bar函数隐藏了。

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

最新更新