std::string Get()
{
/// Приводим this к A* и вызываем Get, удаляя первый символ
return ( ( A* ) this ) -> Get () .erase (0, 1);
}
Получил бесконечную рекурсию, потому что ((A*)this)->Get() -- полиморфный вызов, потому что Get в классе A определён как virtual. Т.е. ты возьмёшь из таблицы виртуальных функций подобъекта A указатель на виртуальную функцию Get, а он указывает на B::Get.
Если хочешь вызвать метод класса А -- так и пиши:
struct B : public A
{
/// Переопределяем метод Get
std::string Get()
{
return A::Get () .erase (0, 1);
}
};