0

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

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

4

1 回答 1

3

你可以简单地做到这一点

using Base::Bar;

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

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

于 2013-10-28T06:37:26.327 回答