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

Введение к ромбовидному наследованию в C++

Ромбовидная схема возникает, когда два родителя делят общего предка, а снизу их соединяет один класс.

При обычном public-наследовании без ключевого слова virtual каждая ветка приносит свою копию предка. В объекте оказываются две независимые части Base, и адреса этих частей различаются. Соберем схему и выведем два адреса:

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

Строки на экране не совпадают: в памяти лежат две подобъектные копии одного и того же базового типа.

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