1
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)

4

2 回答 2

1

只需创建基类privateprotectedprivate默认情况下使用时class,到目前为止还可以)并且不使用,而是覆盖派生类中的函数

class Bar: private Foo
{
public:
    int fn() {return Foo::fn();}
};

这只会使仅int fn()在 Bar 和 中可见not int fn(int)。当然,编译器会大声喊,那个fn不是虚函数,你还是重写它,但只要它只调用基类中的那个,都一样。

于 2011-11-28T23:26:51.423 回答
1

AFAIK 不,您不能从命名空间中“隐藏”名称。这与names相关,因此包括所有可能的同名重载。

同样,没有办法unusing命名/命名空间。

这种现象导致了图书馆作者应该始终注意的鲜为人知的ADL 陷阱。


PS。在示例代码中,当然你可以直接说/*using*/ Foo::fn;line... 但我猜这不是你的实际代码...

于 2011-11-26T20:22:44.330 回答