我被要求对使用 Visual Studio 2013 VC++ 构建的旧项目进行轻微更改。因此,我安装了 VS2013,进行了更改,编译了它,但它的行为在我没有触及的代码上发生了变化。
更新后,调用派生类上的方法的虚拟方法现在正在调用基类上的方法。
我不是 C++ 专家,但我可以看到这是一个不好的做法。我只想知道 C++ 是否对此进行了重大更改,以便我可以向要求我更新此项目的人进行解释。
class BaseItem
{
public:
virtual void SetValue(int first, int* second = nullptr)
{
};
}
class DerivedItem : public BaseItem
{
public:
virtual void SetValue(int first)
{
};
}
BaseItem* item = new DerivedItem();
// Before: SetValue on the DerivedItem was called.
// After: SetValue on the BaseItem is called.
item->SetValue(5, nullptr);
如果我像这样编辑DerivedItem :
class DerivedItem : public BaseItem
{
public:
virtual void SetValue(int first, int* second = nullptr)
{
};
}
再次调用DerivedItemSetValue
上的。