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

Порядок виртуальных баз в C++

Создание объекта с виртуальными базами идет по правилам языка, а не по порядку записи полей в исходнике.

Сначала выполняются конструкторы всех виртуальных баз, затем остальные базы слева направо, затем конструктор самого нижнего класса. Запишем короткие конструкторы с метками и выведем их порядок для одного объекта:

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

Повторите ромб с метками A, L, R, D в конструкторах Base, Left, Right, Bottom. Создайте объект Bottom и сохраните фактический порядок строк.

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