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

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

Войти
Регистрация
Восстановить пароль
 
 
Рейтинг: Рейтинг темы: голосов - 84, средняя оценка - 4.76
Drus
 Аватар для Drus
57 / 57 / 1
Регистрация: 07.10.2011
Сообщений: 203
#1

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

02.11.2011, 14:39. Просмотров 10611. Ответов 23
Метки нет (Все метки)

Пример - конкретно из книги дейтела, вопрос вызывает двоеточие после конструктора, если оно позвляет производить инициализацию - то почему не делать бы этого в теле. Было бы очень хорошо если бы кто-нибудь ткнул носом в мануал по возможным вариантам использования этой вундервафли.
C++
1
String::String( const char *s):length( ( s != 0) ? strlen(2) : 0){/*...*/}
Поиском по форуму не нашел, если было - прошу понять, простить (с)
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
02.11.2011, 14:39     Двоеточие в конструкторе, что это?
Посмотрите здесь:

C++ Синтаксис С++. Двоеточие в конструкторе
C++ Что означает двойное двоеточие в коде
Нужно произвести считывание пути к файлу с клавиатуры. Причём сделать это в конструкторе. Всё остальное корректно работает. C++
C++ Двоеточие в конструкторе
Что означает двойное двоеточие в vector<int>::iterator it ? C++
C++ Что это за метод?И что он делает?
Объясните что именно делает "x%d, y%d: " или что это в даном коде C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Сыроежка
Заблокирован
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++
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     Двоеточие в конструкторе, что это?
Ответ Создать тему
Опции темы

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