Форум программистов, компьютерный форум CyberForum.ru

Порядок инциализаций членов при созданий объекта X - C++

Восстановить пароль Регистрация
 
vechestva
-28 / 0 / 0
Регистрация: 14.09.2012
Сообщений: 47
11.11.2012, 06:21     Порядок инциализаций членов при созданий объекта X #1
Всем доброго.
Меня интересует порядок инциализаций членов(m_a, m_b, m_c, m_d) в данной ситуаций:
C++
1
2
3
4
5
6
7
8
9
10
11
12
class Foo
{
    int m_a;
    int m_b;
    int m_c;
    int m_d;
public:
    Foo(int a, int c) : m_a(a), m_c(c) 
    {
        m_d = 42;
    }
};
объясните пожалуйста, а то у меня от этого мозг сломался.
Знаю только то, что m_d будет последним.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
11.11.2012, 06:21     Порядок инциализаций членов при созданий объекта X
Посмотрите здесь:

C++ Требуется ли при удалении объекта посредством delete указывать тип объекта?
Порядок вызова конструкторов при множественном наследовании C++
При возврате объекта из функции пишет, что для объекта не определен констуктор копирования C++
C++ Порядок вершин при поиске кратчайшего пути
C++ Перенести все цифры в конец строки, при этом порядок букв не меняется
C++ Как при вводе распознать действия и запомнить их порядок
Как добавить авторизацию при созданий текстового файла C++
Порядок инициализации членов класса C++

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
alsav22
5282 / 4801 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
11.11.2012, 09:17     Порядок инциализаций членов при созданий объекта X #2
Цитата Сообщение от vechestva Посмотреть сообщение
порядок инциализаций членов(m_a, m_b, m_c, m_d)
Порядок инициализации будет такой же, как в объявлении класса: m_a, m_b, m_c, m_d, а не такой, как в списке инициализаторов (то есть там можно произвольно написать, но лучше так же).

Добавлено через 3 минуты
Лучше потому, что при инициализации одного поля, может быть использавано другое поле, а оно, естественно, перед этим должно быть инициализированно. Когда список инициализаторов соответствует порядку полей в объявлении класса, то это легче отследить.

Добавлено через 8 минут
Вот так, например, будет ошибка:
C++
1
2
3
4
Foo(int b, int c) : m_b(b), m_a(m_b), m_c(с)
{
        m_d = 42;
 }
Хотя в списке m_b инициализируется первым, в действительности это поле будет инициализироваться после m_a. Сначала будет выполнено: m_a(m_b), но m_b ещё будет неинициализировано, отчего и ошибка.
vechestva
-28 / 0 / 0
Регистрация: 14.09.2012
Сообщений: 47
11.11.2012, 09:58  [ТС]     Порядок инциализаций членов при созданий объекта X #3
Цитата Сообщение от alsav22 Посмотреть сообщение
Порядок инициализации будет такой же, как в объявлении класса: m_a, m_b, m_c, m_d, а не такой, как в списке инициализаторов (то есть там можно произвольно написать, но лучше так же).

Добавлено через 3 минуты
Лучше потому, что при инициализации одного поля, может быть использавано другое поле, а оно, естественно, перед этим должно быть инициализированно. Когда список инициализаторов соответствует порядку полей в объявлении класса, то это легче отследить.

Добавлено через 8 минут
Вот так, например, будет ошибка:
C++
1
2
3
4
Foo(int b, int c) : m_b(b), m_a(m_b), m_c(с)
{
        m_d = 42;
 }
Хотя в списке m_b инициализируется первым, в действительности это поле будет инициализироваться после m_a. Сначала будет выполнено: m_a(m_b), но m_b ещё будет неинициализировано, отчего и ошибка.
большое спасибо, вы рассказали именно то, что я хотел узнать
Yandex
Объявления
11.11.2012, 09:58     Порядок инциализаций членов при созданий объекта X
Ответ Создать тему
Опции темы

Текущее время: 17:21. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru