(在msvc2017上测试)
struct AAA
{
virtual float run(int arg)
{
return 5.5f;
}
};
struct BBB : AAA
{
virtual bool run(double arg)
{
return false;
}
};
struct CCC : BBB
{
virtual float run(int arg)
{
return 7.7f;
}
virtual bool run(double arg)
{
return true;
}
};
CCC c;
BBB* pb = &c;
pb->run(5); // call CCC::run(double arg), WHY??
pb->run((int)5); // call CCC::run(double arg), WHY??
Run Code Online (Sandbox Code Playgroud)
为什么pb->run(5)只打电话CCC::run(double arg),却不打电话CCC::run(int arg)?
具有不同签名的子类的虚拟方法是否与基类的接口重叠?