如果我在基类中有一个重载函数,为什么我需要为我没有重新实现的所有重载副本声明基类的命名空间(假设我已经重新实现了至少一个)。例如,请考虑以下代码:
#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)上查找和替换不会很好。
答案 0 :(得分:3)
你可以简单地这样做
using Base::Bar;
在Foo
课程中。如果没有Bar
,编译器将找不到using
,因为它被Foo::Bar
函数隐藏。
名称可以通过嵌套声明性区域中的相同名称的显式声明或派生来隐藏 类