Назад к задачам
Junior — Senior
5

Обнаружьте и исправьте проблемы в C++‑программе с множественным наследованием

Компании, где спрашивали:

Киберпротект
Получайте помощь с лайвкодингом в реальном времени с Sobes Copilot
Условие задачи

В данном фрагменте C++‑кода присутствуют некорректные приведения типов и ошибки, связанные с множественным наследованием. Необходимо поправить их, чтобы код компилировался без ошибок и корректно использовал полиморфизм.

# include <iostream>
struct A
{
    virtual ~A() = default;
};
struct B
{
    virtual void foo()();
};

struct C: public B, public A
{
    C() : B(), A()
    {
    std::cout<< "C";
    }
    void foo() override
    {}
    int c;
};

void Foo(A* a)
{
    auto cl = static_cast<C*>(a); // 1
    auto b1 = static_cast<B*>(a); // 2

    auto b1_ref = static_cast<B>(*a); // 3
    auto cl_ref = static_cast<C&>(*a); // 4

    auto c2 = dynamic_cast<C*>(a); // 5
    auto b2 = dynamic_cast<B*>(a); // 6

    auto c2_ref = dynamic_cast<C&>(a); // 7
    auto c3 = reinterpret_cast<C*>(a); // 8
}

Ваша задача – проанализировать указанные приведения, определить, какие из них недопустимы или потенциально опасны, и внести необходимые исправления, используя подходящие типы приведения и корректную инициализацию базовых классов.