如何从基类中公开隐藏的重载?

时间:2011-08-10 13:27:50

标签: c++ inheritance overloading hidden

鉴于此代码:

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;
}

2 个答案:

答案 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可见到派生范围。但是从设计的角度来看,这是不可取的,因为在使用公共接口时,您将名称隐藏到派生的范围内。 (使用私有界面执行此操作更有意义)