C++纯虚函数继承(相同签名)

gri*_*ble 2 c++ inheritance method-signature

为什么这不编译?
错误C2660:'Concrete :: WriteLine':函数不带1个参数
我知道如果我
使用AbstractBase :: WriteLine 添加Line://;
它有效,但我不明白为什么.

#include "iostream" 

class AbstractBase
{
public:
   virtual void WriteLine() = 0;
   virtual void WriteLine( int i )
   {
      std::cout<<"AbstractBase"<<std::endl;
   }
};

class Concrete : public AbstractBase
{
public:
   //using AbstractBase::WriteLine;
   virtual void WriteLine()
   {
      std::cout<<"Concrete Sub Class"<<std::endl;
   }
};

int main()
{
   Concrete ff;
   ff.WriteLine();
   ff.WriteLine(1);
   return 0;
}
Run Code Online (Sandbox Code Playgroud)

有人可以解释一下这里发生了什么.感谢名单


有谁知道这种行为是否是来自C++标准的已定义行为.是否在C++标准中提到过?或者它只是一种编译器行为?

Alo*_*ave 8

一旦声明了一个函数:

void WriteLine()
Run Code Online (Sandbox Code Playgroud)

在派生类中,它隐藏了具有相同名称的所有基类函数.
上面没有参数的函数隐藏了具有相同名称的函数并且带有一个参数,因为编译器找不到具有一个参数的函数它报告错误.

这条线:

using AbstractBase::WriteLine;
Run Code Online (Sandbox Code Playgroud)

从派生类中的Base类启用(引入范围)所有隐藏名称,因此可以使用带有一个参数的函数.

好读:
什么意思,警告:Derived :: f(char)隐藏Base :: f(double)?