Pediram-me para fazer uma pequena alteração em um projeto antigo criado com o Visual Studio 2013 VC++. Então instalei o VS2013, fiz a alteração, compilei mas o comportamento dele mudou em um código que não mexi.
Após a atualização, um método virtual que estava chamando o método na classe derivada agora está chamando o método na classe base.
Não sou especialista em C++, mas posso ver que essa é uma prática ruim. Tudo o que quero saber é se houve alguma alteração significativa em C++ em torno disso, para que eu possa explicar à pessoa que me pediu para atualizar este projeto.
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);
e se eu editar o DerivedItem assim:
class DerivedItem : public BaseItem
{
public:
virtual void SetValue(int first, int* second = nullptr)
{
};
}
o SetValue
no DerivedItem é chamado novamente.