Я в курсе, что virtual не обязательное ключевое слово и не должно влиять на переопределение.
Но!
С этим кодом все в порядке:
struct A
{
/// Слово virtual отсутствует
std::string Get ()
{
return "AB";
}
};
struct B : public A
{
/// Переопределяем метод Get
std::string Get()
{
/// Приводим this к A* и вызываем Get, удаляя первый символ
return ( ( A* ) this ) -> Get () .erase (0, 1);
}
};
///...
std :: cout <<B().Get(); /// Все нормально, выводится 'B'
А с вот этим нет:
struct A
{
/// Слово virtual присутствует
virtual std::string Get ()
{
return "AB";
}
};
struct B : public A
{
/// Переопределяем метод Get
std::string Get()
{
/// Приводим this к A* и вызываем Get, удаляя первый символ
return ( ( A* ) this ) -> Get () .erase (0, 1);
}
};
///...
std :: cout <<B().Get(); /// main сразу завершается с возвратом что то около -14556645665566