Назад к задачамПолучайте помощь с лайвкодингом в реальном времени с Sobes Copilot
Junior — Senior
5
Обнаружьте и исправьте проблемы в C++‑программе с множественным наследованием
Компании, где спрашивали:
Киберпротект
Условие задачи
В данном фрагменте 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
}
Ваша задача – проанализировать указанные приведения, определить, какие из них недопустимы или потенциально опасны, и внести необходимые исправления, используя подходящие типы приведения и корректную инициализацию базовых классов.