• Что не так со словом virtual?

    jcmvbkbc
    @jcmvbkbc
    "I'm here to consult you" © Dogbert
    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); 
        }
    };
    Ответ написан
    Комментировать