Каким образом порядок наследования в C ++ влияет на конструктор?

Если я определяю структуру, которая наследуется от нескольких других структур, как порядок, в котором я перечисляю их, влияет на что-то вроде этого:

struct D: C,B{
D(): B(), C(){...}
};

Простой вопрос, но заранее спасибо!

1

Решение

Порядок построения зависит от последовательности наследования. Порядок инициализации не имеет значения. GCC фактически выдает предупреждение в этом случае.

В конструкторе ‘D :: D ()’:

main.cpp: 16: 17: предупреждение: база ‘B’ будет инициализирована после
[-Wreorder]

 D(): B(), C(){
^

main.cpp: 16: 17: предупреждение: база ‘C’ [-Wororder]

main.cpp: 16: 5: предупреждение: при инициализации здесь [-Wreorder]

 D(): B(), C(){

Это также четко указано в стандарте. Из раздела 12.6.2 Инициализация баз и членов

Инициализация происходит в следующем порядке:

— Сначала и только
для конструктора самого производного класса, как описано ниже,
виртуальные базовые классы должны быть инициализированы в порядке их появления
первый слева направо обход глубины направленного ациклического графа
базовые классы, где «слева направо» — порядок появления
имена базовых классов в производном списке базовых спецификаторов.
— Затем, прямые базовые классы должны быть инициализированы в порядке объявления, так как они
появляются в списке базовых спецификаторов (независимо от порядка
MEM-инициализаторы).

1

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]