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++标准中提到过?或者它只是一种编译器行为?
一旦声明了一个函数:
void WriteLine()
Run Code Online (Sandbox Code Playgroud)
在派生类中,它隐藏了具有相同名称的所有基类函数.
上面没有参数的函数隐藏了具有相同名称的函数并且带有一个参数,因为编译器找不到具有一个参数的函数它报告错误.
这条线:
using AbstractBase::WriteLine;
Run Code Online (Sandbox Code Playgroud)
从派生类中的Base类启用(引入范围)所有隐藏名称,因此可以使用带有一个参数的函数.
好读:
什么意思,警告:Derived :: f(char)隐藏Base :: f(double)?