57 / 57 / 1
Регистрация: 07.10.2011
Сообщений: 203
|
||||||
1 | ||||||
Двоеточие в конструкторе, что это?02.11.2011, 14:39. Показов 27292. Ответов 23
Метки нет (Все метки)
Пример - конкретно из книги дейтела, вопрос вызывает двоеточие после конструктора, если оно позвляет производить инициализацию - то почему не делать бы этого в теле. Было бы очень хорошо если бы кто-нибудь ткнул носом в мануал по возможным вариантам использования этой вундервафли.
0
|
02.11.2011, 14:39 | |
Ответы с готовыми решениями:
23
Двоеточие в конструкторе Синтаксис С++. Двоеточие в конструкторе Поясните пожалуйста что означает двоеточие и то что идет после него Что это за знак >> прочитал что это сдвиг вправо? что он делает |
В астрале
8049 / 4806 / 655
Регистрация: 24.06.2010
Сообщений: 10,562
|
|
02.11.2011, 14:39 | 2 |
Drus, Cписок инициализации.
0
|
57 / 57 / 1
Регистрация: 07.10.2011
Сообщений: 203
|
|
02.11.2011, 14:53 [ТС] | 3 |
Нашел темы, почитал. Возникла каша в голове.
Как я понял: Это список, в котором через запятую перечислены пары из имени члена класса и значения, которое необходимо ему присвоить, взятого в скобки (с) Вот какой вопрос гложет: а есть ли разница инициализации списком и инициализации в теле конструктора, и какой вариант предпочтительнее?
1
|
В астрале
8049 / 4806 / 655
Регистрация: 24.06.2010
Сообщений: 10,562
|
|
02.11.2011, 15:00 | 4 |
Drus, Через список инициализация происходит шустрее. + к тому константные данные можно инициализировать только через список.
2
|
57 / 57 / 1
Регистрация: 07.10.2011
Сообщений: 203
|
|
02.11.2011, 15:01 [ТС] | 5 |
спасибо огромное!
0
|
В астрале
8049 / 4806 / 655
Регистрация: 24.06.2010
Сообщений: 10,562
|
|
02.11.2011, 15:01 | 6 |
http://liveworkspace.org/code/... 5452fee539
и http://liveworkspace.org/code/... 5f6e1f6b70 Так же базовые классы инициализируются только через список.
1
|
02.11.2011, 15:21 | 7 |
В частном случае. Вообще в скобках - параметры конструктора этого члена, так что значений там может быть и несколько.
http://liveworkspace.org/code/... db70c04019
1
|
57 / 57 / 1
Регистрация: 07.10.2011
Сообщений: 203
|
|
02.11.2011, 15:39 [ТС] | 9 |
сильно помогло в осознании, спс. Сразу как-то не совместил что инициализация и есть конструктор, вот и не понимал смысла
0
|
Заблокирован
|
||||||
02.11.2011, 16:14 | 11 | |||||
Уместно.
http://liveworkspace.org/code/... 55b514beff
0
|
Каратель
|
|
02.11.2011, 16:31 | 12 |
да хоть десять инициализаций - все десять мемберов проинициализируются за 10N, но это никак не влияет на само N
все это в теории конечно ибо состояние системы в целом разное в каждый момент времени
0
|
Заблокирован
|
|
02.11.2011, 16:48 | 15 |
Так об этом и речь!
Инициализация объекта - суть инициализация всех его данных-членов. Но не просто инициализация, а ещё и настройка. Если инициализировать данные-члены в списках инициализации, то объект-хозяин проинициализируется быстрее. /зы Простите... может быть я путаюсь в понятиях, но я всегда думал, что агрегат - это класс, который содержит агрегируемые элементы. Ну то есть агрегат - это большая шняга, которая состоит из маленьких элементов. А как по научному называются элементы из которых состоит агрегат, я что-то даже и не вспомню) Не просвятите?
0
|
Jupiter
|
02.11.2011, 16:57
#16
|
0
|
5828 / 3479 / 358
Регистрация: 08.02.2010
Сообщений: 7,448
|
||||||
02.11.2011, 18:19 | 17 | |||||
ну и ссылки тоже:
0
|
Заблокирован
|
|
02.11.2011, 18:39 | 18 |
На мой взгляд, то, что вы говорите, является глупостью. Во-первых, внутри тела конструктора происходит не инициализация, а присваивание. То есть если вы имеете член класса, который в свою очередь имеет тип класса, то внутри тела конструктора вызывается оператор присваивания для данного члена класса. То есть сначала объект создается с помощью конструктора по умолчанию (если иное не было указано в списке инициализации), а затем для этого объекта вызывается оператор присваивания operator =.
То есть семантически выполняются совершенно разные вещи. Так что сравнивать их бессмысленно!
0
|
Заблокирован
|
|
02.11.2011, 18:55 | 20 |
0
|
02.11.2011, 18:55 | |
02.11.2011, 18:55 | |
Помогаю со студенческими работами здесь
20
Что означает двойное двоеточие в коде Что означает двоеточие в наследовании конструктора? Для чего нужен оператор двоеточие, если два двоеточия - это оператор расширения области видимости Что означает двойное двоеточие в vector<int>::iterator it ? Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |