Другие языки программирования и технологии
C++. Подскажите ответ, есть какие нибудь правила инициализации вложенных структур ?
Например, сначала нужно инициализировать самую глубоко вложенные структуру, а затем подниматься вверх ?
Да, есть рекурсивные правила.
Сначала создаются виртуальные родители, потом прямые родители, потом вложенные члены в том порядке, в котором они описаны в классе (порядок в списке инициализации в конструкторе при этом не важен) .
Если порядoк описания членов в самом классе отличается от порядка в списке инициализации контсруктора, то приличный компилятор выдаст warning.
Правило применяется рекурсивно к родителям и членам класса.
При разрушении все происходит в обратном порядке.
Пример (здесь цифры соответсвуют порядку создания) :
class A: virtual C1, C3, virtual C2, C4 {
SomeClass c5, c6;
SomeClass c7, c8;
A(): c5(), C4(), C3(), C1() {}// здесь порядок не важен совершенно
};
PPS
http://habrahabr.ru/post/58818/
Вот Вам чтиво. Только тут очень простая статья на Хабре, дело в ней ограничивается одними лишь членами класса, родителей и виртуальных родителей там нет.
Но если Вам нужны пруфлинки для моего полного ответа, то это должно легко гуглиться, "C++ initialization order" или "порядок инициализации C++".
Сначала создаются виртуальные родители, потом прямые родители, потом вложенные члены в том порядке, в котором они описаны в классе (порядок в списке инициализации в конструкторе при этом не важен) .
Если порядoк описания членов в самом классе отличается от порядка в списке инициализации контсруктора, то приличный компилятор выдаст warning.
Правило применяется рекурсивно к родителям и членам класса.
При разрушении все происходит в обратном порядке.
Пример (здесь цифры соответсвуют порядку создания) :
class A: virtual C1, C3, virtual C2, C4 {
SomeClass c5, c6;
SomeClass c7, c8;
A(): c5(), C4(), C3(), C1() {}// здесь порядок не важен совершенно
};
PPS
http://habrahabr.ru/post/58818/
Вот Вам чтиво. Только тут очень простая статья на Хабре, дело в ней ограничивается одними лишь членами класса, родителей и виртуальных родителей там нет.
Но если Вам нужны пруфлинки для моего полного ответа, то это должно легко гуглиться, "C++ initialization order" или "порядок инициализации C++".
Это не "нужно", это само происходит - если определены конструкторы.
А если не определены - то это исключительно проблемы разработчика, как и что инициализировать.
А если не определены - то это исключительно проблемы разработчика, как и что инициализировать.
Скорее наоборот инициализируешь основную структуру, а потом наследованием инициализируешь последующие, например:
struct a
{ int count; };
struct b : public a
{ char k; };
и тогда структура б помимо своей переменной будет наследовать и переменную структуры а. .
объявление в теле:
b exp;
cin>>exp.count;
cin>> exp.k;
struct a
{ int count; };
struct b : public a
{ char k; };
и тогда структура б помимо своей переменной будет наследовать и переменную структуры а. .
объявление в теле:
b exp;
cin>>exp.count;
cin>> exp.k;
Похожие вопросы
- В чем причина ненависти к языкам C, C#, C++ на ответах?
- Подскажите учебник по C++! Подскажите учебник по С++, с самого нуля. Желательно с примерами и задачками!
- Помогите, пожалуйста! Куда-то девается свободное место с диска C. Подскажите, что с ним еще можно сделать?
- Очень хочется начать работать в C++ подскажите как это сделать?) )
- задание на C++, подскажите путь решения хотя бы
- c# Подскажите что такое массив?
- Требуется выражение C++ подскажите, что не так.
- Только начал изучать c++, подскажите как в программе указать % ?
- C++ подскажите наглядно про стек и рекурсии
- [C/C++] Oбъявление переменной типа структуры в этой же структуре