鉴于此代码:
class base {
public:
string foo() const; // Want this to be visible in 'derived' class.
}
class derived : public base {
public:
virtual int foo(int) const; // Causes base class foo() to be hidden.
}
如何在不使用调用基类的虚方法重载复制它的情况下使base :: foo()对派生可见? using
是否有诀窍,如果是这样,它会在哪里发生,是这样的吗?
class derived : public base {
public:
virtual int foo(int) const;
using base::foo;
}
答案 0 :(得分:4)
很抱歉答案很简短,但是是的。它就像这样,做你想做的事情:
class derived : public base {
public:
virtual int foo(int) const;
using base::foo;
};
另请注意,即使没有using
:
derived x;
string str = x.base::foo(); // works without using
答案 1 :(得分:1)
using指令将使所选方法从base可见到派生范围。但是从设计的角度来看,这是不可取的,因为在使用公共接口时,您将名称隐藏到派生的范围内。 (使用私有界面执行此操作更有意义)