26 Порядок вызова конструкторов в с++.
В случае, когда класс использует 1 или более
баз. классов, конструкторы
базовых классов вызываются до того, как будет вызван конструктор производного
класса.
Конструкторы баз. классов будут вызываться в порядке их объявления.
class Y{}
class X: public Y
Первым будет вызван конструктор класса Y,
вторым - конструктор класса Х
Конструкторы виртуальных базовых классов
запускаются до невиртуальных базовых классов.
Если иерархия содержит множественные
виртуальные базовые классы, то конструкторы базовых классов запускаются в
последовательности их объявления. Затем перед вызовом конструктора производного
класса конструируются невиртуальные базовые классы.
class base
class base2
class level1: public base2, virtual
public base
class level2: public base2, virtual
public base
class toplevel:
public level1, virtual public level2
toplevel one;
Конструкторы вызываются в следующем порядке:
1)base()
2)base2()
3)level2()
4)base2()
5)level1()
6)toplevel()
Если иерархия класса содержит множественные
экземпляры виртуального базового класса, то данный базовый класс конструируется
только 1 раз. Однако если сущ-т и виртуальные, и невиртуальные экземпляры базового класса, то конструктор
запускается 1 раз для всех виртуальных экземпляров и по разу для каждого невиртуального базового класса.
Конструкторы эл-тов массива запускаются в
порядке возрастания элементов массива.