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 раз для всех виртуальных экземпляров и по разу для каждого невиртуального базового класса.

Конструкторы эл-тов массива запускаются в порядке возрастания элементов массива.

 

Hosted by uCoz