覆盖抽象基类中的函数

Chr*_*ris 1 c++ inheritance overriding

我有一个基类,包含两个相同名称的函数,一个vector<int>作为参数,一个作为参数int.这个想法是子类将定义自己的方法来处理int,基类将能够处理任一选项.但它目前还没有编译.

class base {
public:
  virtual void toBeCalled(int i) const = 0;

  virtual void toBeCalled(std::vector<int> iVec) const
  {
    std::cout << "base::toBeCalled(vec<int>)" << std::endl;
  }
};  

class derived : public base {
public:
  virtual void toBeCalled(int i) const
  {
    std::cout << "derived::toBeCalled(int)" << std::endl;
  }
};

int main(int argc, char* argv[])
{
  derived d;
  std::vector<int> iVec;

  int i = 0;

  d.toBeCalled (i);
  d.toBeCalled (iVec);  //<< Compile error: Cannot convert from std::vector<int> to int

  return 0;
}
Run Code Online (Sandbox Code Playgroud)

我可以通过在main()中使用基类对象来使它工作,base *d = new derived()但是如果可能的话我宁愿不这样做,因为我想访问一些派生类函数.

Ste*_*sop 5

using base::toBeCalled;class derived.

我很确定这是一个骗局,但我找不到,所以我不会详细说明.但是当您在派生类中重写(或重载)函数时,您将隐藏该函数的所有基类版本.

此处讨论了该行为的基本原理:https://stackoverflow.com/a/12036004/13005