Порядок виртуальных баз в 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 и сохраните
фактический порядок строк.