Следите за новинками
в нашем Telegram канале. Жми, чтобы подписаться:)
492 of 696 menu
◀ ▶

Повтор базового класса в C++

Две копии предка несут один и тот же набор методов, и компилятор не знает, через какую ветку идти к общему методу.

Неквалифицированный доступ к такому методу из самого нижнего класса помечают как неоднозначный. Явное имя промежуточной базы в квалификаторе выбирает нужную копию и программа собирается. Запишем ромб без виртуального наследования и вызов через Left:::

┌pPathX="main.cpp" #include <iostream> class Base { public: void ping() { std::cout << "base\n"; } }; class Left : public Base {}; class Right : public Base {}; class Bottom : public Left, public Right { public: void call() { Left::ping(); } }; int main() { Bottom item; item.call(); return 0; }

Постройте ромб с методом mark в Base. В Bottom вызовите его через Right:: и выведите строку, которую печатает метод.

← →
↑
Мы используем cookie для работы сайта, аналитики и персонализации. Обработка данных происходит согласно Политике конфиденциальности.
принять все настроить отклонить