非虚函数正在隐藏具有不同参数集的虚基类函数

时间:2019-02-14 15:31:29

标签: c++

我有点困惑,我们有一个基类,它具有带有参数和特定参数签名的虚函数。我们试图添加一个具有相同名称但为派生类设置了不同参数的函数,现在,除非我们使用class对其进行命名,否则编译器将看不到基类函数。

class A
{
   public:
   virtual void AddItem(int i);
}

class B: public A
{
   public:
   void AddItem(const std::string &i);

   void OtherFunction();
}

void B::OtherFunction()
{
     // This is a compiler error
     AddItem(1);

     // We have to do this
     A::AddItem(1);
}

为什么带有不同参数包的派生类函数会隐藏基类函数?我以为功能是通过名称AND参数包定义的。

答案:另一篇SO文章的摘要 C ++实现了“名称隐藏”,它仅查看函数的实际名称,而忽略参数包。具有名为“ DoStuff”的函数的派生类将隐藏具有相同名称的所有基类函数,而与参数无关。要从B调用它们,您需要如上所述进行显式定义,或者可以使用using语句将函数“导入”到派生函数中。

0 个答案:

没有答案