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

Двоеточие в конструкторе, что это? - C++

Восстановить пароль Регистрация
 
 
Рейтинг: Рейтинг темы: голосов - 84, средняя оценка - 4.76
Drus
 Аватар для Drus
57 / 57 / 1
Регистрация: 07.10.2011
Сообщений: 203
02.11.2011, 14:39     Двоеточие в конструкторе, что это? #1
Пример - конкретно из книги дейтела, вопрос вызывает двоеточие после конструктора, если оно позвляет производить инициализацию - то почему не делать бы этого в теле. Было бы очень хорошо если бы кто-нибудь ткнул носом в мануал по возможным вариантам использования этой вундервафли.
C++
1
String::String( const char *s):length( ( s != 0) ? strlen(2) : 0){/*...*/}
Поиском по форуму не нашел, если было - прошу понять, простить (с)
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Сыроежка
Заблокирован
02.11.2011, 19:23     Двоеточие в конструкторе, что это? #21
Цитата Сообщение от Bers Посмотреть сообщение
Там выше мини-тесты, которые прекрасно все отображают.
Работать прекрасно может многое. Я говорю о бессмысленности такого сравнения, так как имеется разная семантика двух операций.
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Bers
Заблокирован
02.11.2011, 19:37     Двоеточие в конструкторе, что это? #22
Цитата Сообщение от Сыроежка Посмотреть сообщение
Работать прекрасно может многое. Я говорю о бессмысленности такого сравнения, так как имеется разная семантика двух операций.
Инициализация объекта, который сначала конструирует свои члены по дефолту, а потом в своем конструкторе запускает для них оператор= выполняется дольше, чем аналогичная инициализация, но при которой члены сразу инициализируются нужными значениями.
Сыроежка
Заблокирован
02.11.2011, 19:41     Двоеточие в конструкторе, что это? #23
Цитата Сообщение от Bers Посмотреть сообщение
Инициализация объекта, который сначала конструирует свои члены по дефолту, а потом в своем конструкторе запускает для них оператор= выполняется дольше, чем аналогичная инициализация, но при которой члены сразу инициализируются нужными значениями.
Я это вам и втолковывая, что это очевидно без всяких тестов! Вы выполняете совершенно разные операции, так как какой смысл тестов?!!
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
02.11.2011, 19:55     Двоеточие в конструкторе, что это?
Еще ссылки по теме:

Не пойму что делает : в конструкторе C++
C++ Что означает двоеточие в наследовании конструктора?
Что значит const в конструкторе класса? C++

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

Или воспользуйтесь поиском по форуму:
Bers
Заблокирован
02.11.2011, 19:55     Двоеточие в конструкторе, что это? #24
Цитата Сообщение от Сыроежка Посмотреть сообщение
Я это вам и втолковывая, что это очевидно без всяких тестов! Вы выполняете совершенно разные операции, так как какой смысл тестов?!!
То есть, вы мне втолковываете то, что я сам втолковывал другим?

Ну то есть, я говорю:

- яблоко падает на землю.
А вы мне возражаете:

- Речи твои глупы! Яблоко ПАДАЕТ НА ЗЕМЛЮ!!!

Большое спасибо за то, что пытались убедить меня в том, в чем я и сам искренне был убежден.

Смыл тестов сейчас объясню.

int A=10; //здесь запустится конструктор, или оператор= ?

На самом деле, в момент инициализации переменной значок '=' запускает конструктор. Эта запись эквивалентна другой: int A(10);
(вот это не очевидная ситуация для многих новичков).

А вот когда объект уже построен, то значок "равно" запускает оператор=, а не конструктор.

Смысл мини-тестов - показать:

1. Что когда запускается тело конструктора класса, все его данные-члены уже сконструированы, и поэтому, там запустится оператор=, а не конструктор.

2. Что списки инициализации - единственное место, где можно инициализировать данные-члены явными конструкторами.

3. Что есть случаи, когда единственный смысл привести данные-члены в нужное состояние - только списки инициализации.
Yandex
Объявления
02.11.2011, 19:55     Двоеточие в конструкторе, что это?
Ответ Создать тему
Опции темы

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