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

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
 
Рейтинг: Рейтинг темы: голосов - 117, средняя оценка - 4.91
RASHFor
6 / 6 / 0
Регистрация: 12.02.2012
Сообщений: 224
#1

Когда надо использовать списки инициализации, а когда можно заменить их констуктором по умолчанию? - C++

09.09.2012, 20:23. Просмотров 15124. Ответов 24
Метки нет (Все метки)

1)Любезные,скажите когда надо исп. списки инициализации, а когда можно заменить констуктором по умолчанию?
2) правильно ли утверждение,что списки инициализации можно заменить к.по умолчанию?
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
09.09.2012, 20:23     Когда надо использовать списки инициализации, а когда можно заменить их констуктором по умолчанию?
Посмотрите здесь:

C++ Указатель this - как и когда его использовать
Перестало выводить, когда задание списков перевел в конструкторы, когда были просто функции выводило нормально. C++
Когда создается конструктор по умолчанию? C++
C++ Когда какой контейнер использовать?
Записать условия когда является истинным , когда: C++
C++ Когда используется * перед указателями, а когда нет?
Когда использовать WinAPI, а когда функции языка? C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
IGPIGP
Комп_Оратор)
Эксперт по математике/физике
6411 / 3050 / 300
Регистрация: 04.12.2011
Сообщений: 8,237
Записей в блоге: 3
01.02.2015, 01:56     Когда надо использовать списки инициализации, а когда можно заменить их констуктором по умолчанию? #21
Цитата Сообщение от hoggy Посмотреть сообщение
Это именно инициализация, а не присвоение.
hoggy, я написал что это инициализация с синтаксисом присвоения:
Цитата Сообщение от IGPIGP Посмотреть сообщение
А присвоение при объявлении и в теле конструктора это инициализация.
Вы стали спорить и я показал, что имел ввиду под "присвоение при объявлении " : int a = 123;

И оказалось что:
Цитата Сообщение от hoggy Посмотреть сообщение
Это именно инициализация, а не присвоение.
Давайте так: Вы правы. И всё.
player1975
0 / 0 / 0
Регистрация: 14.04.2016
Сообщений: 3
13.09.2016, 11:04     Когда надо использовать списки инициализации, а когда можно заменить их констуктором по умолчанию? #22
В догонку:
есть несколько типов инициализаций, но что можно сказать про эту инициализацию:
C++
1
      int i=22 ; // direct, copy? (C++98)
И чем
C++
1
        int i=22;
отличается от
C++
1
2
        int i; 
        i=22;
or
C++
1
        int i(22);
А , например,
C++
1
2
3
       Type i1;
       Type i2;
       i2=i1;
отличается от
C++
1
2
       Type i1;
       Type i2=i1;
(Type - пользовательский тип...
DrOffset
6851 / 4062 / 927
Регистрация: 30.01.2014
Сообщений: 6,859
13.09.2016, 14:19     Когда надо использовать списки инициализации, а когда можно заменить их констуктором по умолчанию? #23
Цитата Сообщение от player1975 Посмотреть сообщение
есть несколько типов инициализаций, но что можно сказать про эту инициализацию:
C++
1
int i=22 ; // direct, copy? (C++98)
copy.
сокращенная запись для
C++
1
int i( int(22) );
Цитата Сообщение от player1975 Посмотреть сообщение
И чем
C++
1
int i=22;
отличается от
C++
1
2
int i;
i=22;
or
C++
1
int i(22);
первое - инициализация (copy), второе - не инициализация, это присваивание, третье - direct initialization.

Цитата Сообщение от player1975 Посмотреть сообщение
А , например,
C++
1
2
3
Type i1;
Type i2;
i2=i1;
отличается от
C++
1
2
Type i1;
Type i2=i1;
Первое - это не инициализация, это присваивание.
Второе - copy initialization, как в первом примере с целыми числами.
ИсмаилПркопенко
-11 / 5 / 0
Регистрация: 14.11.2015
Сообщений: 573
17.04.2017, 22:37     Когда надо использовать списки инициализации, а когда можно заменить их констуктором по умолчанию? #24
Цитата Сообщение от silent_1991 Посмотреть сообщение
IGPIGP, да банальнейший пример - вызов конкретного конструктора базового класса можно сделать только в списке инициализации.
А зачем разработчики языка так сделали?
Какой в этом смысл?
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
18.04.2017, 05:49     Когда надо использовать списки инициализации, а когда можно заменить их констуктором по умолчанию?
Еще ссылки по теме:

C++ Когда нужно использовать исключения
Когда стоит использовать класс, а когда лучше обойтись без них? C++
Объяснить (с примерами) для чего нужен RTTI, как и когда его можно и нужно использовать C++
C++ Можно ли использовать конструктор по умолчанию и конструктор инициализации одновременно?
C++ Когда запускаю и ввожу параметры, то, в момент когда программа должна выполнять действие, пишет ошибку

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

Или воспользуйтесь поиском по форуму:
silent_1991
Эксперт С++
4956 / 3032 / 149
Регистрация: 11.11.2009
Сообщений: 7,027
Завершенные тесты: 1
18.04.2017, 05:49     Когда надо использовать списки инициализации, а когда можно заменить их констуктором по умолчанию? #25
ИсмаилПркопенко, очень просто. К моменту, когда мы входим в тело конструктора производного класса, та его часть, которая относится к базовому классу, уже должна быть полностью инициализирована. В общем случае только базовый класс знает, как именно должны быть инициализированы его поля, там может быть и простейшая инициализация конкретными значениями, и очень сложная работа, вплоть до, например, получения данных для инициализации по сети. А инициализация производного класса может (и зачастую будет) зависеть от значений, установленных в процессе инициализации базового класса. Более того, конструкторы базовых классов будут вызваны до инициализации любых полей производного класса, в том числе когда инициализация происходит через список инициализации, потому что в этом случае также может возникнуть зависимость.
Yandex
Объявления
18.04.2017, 05:49     Когда надо использовать списки инициализации, а когда можно заменить их констуктором по умолчанию?
Ответ Создать тему
Опции темы

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