c++ - 覆盖抽象基类中的函数

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

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

最佳答案

using base::toBeCalled; 放入 class derived 中。

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

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

关于c++ - 覆盖抽象基类中的函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15269641/

相关文章:

java - 使用 onkeydown 方法或覆盖 onbackbuttonpressed 时,Android 后退按钮会卡住

WPF:RenderOptions.EdgeMode ="Unspecified"与 "Alias"使用本地设置覆盖全局设置

c++ - SendMessage 到编辑控件 C++

c++ - 如果基类被公开继承,基类的公共(public)静态函数是否成为派生类的成员函数?

scala - 澄清为什么我不能通过它的子类型覆盖使用泛型类参数的方法

javascript - JavaScript 中的函数重写

c++ - C++结合从一张照片中裁剪的图像

super 方法调用中的 C++ 名称冲突

c++ - 如何向 visual studio 2015 添加多个属性表?

class - 如何让继承从父类到子类python34