class Foo
{
public:
int fn()
{
return 1;
}
int fn(int i)
{
return i; //2nd fn()
}
};
class Bar:Foo
{
public :
Foo::fn;
};
int main(int argc, char** argv)
{
Bar b;
cout<<b.fn(2)<<endl;
}
可以隐藏具体类“Bar”中的fn(int)
答案 0 :(得分:1)
AFAIK不,你不能在命名空间中“隐藏”名称。这与 names 有关,因此包含所有可能的同名重载。
同样,unusing
无法使用名称/命名空间。
这种现象导致图书馆作者应该始终注意到的鲜为人知的ADL Pitfall。
PS。,当然您可以放弃/*using*/ Foo::fn;
行的行......但我想这不是您的实际代码....
答案 1 :(得分:1)
只需制作基类private
,protected
(使用private
时默认为class
,到目前为止,确定)并且不使用,但是覆盖派生类
class Bar: private Foo
{
public:
int fn() {return Foo::fn();}
};
这只会在条形码和int fn()
中仅显示not int fn(int)
。当然,编译器会大声喊叫,fn不是虚函数,但你仍然会覆盖它,但只要它只调用基类中的那个,它就完全相同。