57 / 57 / 1
Регистрация: 07.10.2011
Сообщений: 203
1

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

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

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

Двоеточие в конструкторе
class A { public: A(): }; Что означает двоеточие и что туда надо писать?

Синтаксис С++. Двоеточие в конструкторе
struct busy_head { size_t size; busy_head(size_t size) : size(size) { }; // Как...

Поясните пожалуйста что означает двоеточие и то что идет после него
В 4 строчке после параметра в скобочках нету ";" или же тела функции, что не сходится с моим...

Что это за знак >> прочитал что это сдвиг вправо? что он делает
int d=6, c=5,f; f = d >> c; cout<< f; вывод 0

23
Заблокирован
02.11.2011, 19:23 21
Цитата Сообщение от Bers Посмотреть сообщение
Там выше мини-тесты, которые прекрасно все отображают.
Работать прекрасно может многое. Я говорю о бессмысленности такого сравнения, так как имеется разная семантика двух операций.
0
Заблокирован
02.11.2011, 19:37 22
Цитата Сообщение от Сыроежка Посмотреть сообщение
Работать прекрасно может многое. Я говорю о бессмысленности такого сравнения, так как имеется разная семантика двух операций.
Инициализация объекта, который сначала конструирует свои члены по дефолту, а потом в своем конструкторе запускает для них оператор= выполняется дольше, чем аналогичная инициализация, но при которой члены сразу инициализируются нужными значениями.
0
Заблокирован
02.11.2011, 19:41 23
Цитата Сообщение от Bers Посмотреть сообщение
Инициализация объекта, который сначала конструирует свои члены по дефолту, а потом в своем конструкторе запускает для них оператор= выполняется дольше, чем аналогичная инициализация, но при которой члены сразу инициализируются нужными значениями.
Я это вам и втолковывая, что это очевидно без всяких тестов! Вы выполняете совершенно разные операции, так как какой смысл тестов?!!
0
Заблокирован
02.11.2011, 19:55 24
Цитата Сообщение от Сыроежка Посмотреть сообщение
Я это вам и втолковывая, что это очевидно без всяких тестов! Вы выполняете совершенно разные операции, так как какой смысл тестов?!!
То есть, вы мне втолковываете то, что я сам втолковывал другим?

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

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

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

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

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

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

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

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

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

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

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

3. Что есть случаи, когда единственный смысл привести данные-члены в нужное состояние - только списки инициализации.
3
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
02.11.2011, 19:55
Помогаю со студенческими работами здесь

Что означает двойное двоеточие в коде
Что в с++ значит вот это ::

Что означает двоеточие в наследовании конструктора?
При изучении ООП в рамках языка c++ столкнулся с интересной формой обьявления конструктора объекта:...

Для чего нужен оператор двоеточие, если два двоеточия - это оператор расширения области видимости
для чего нужен оператор двоеточие ( : ), если два двоеточия( :: ) - это оператор расширения области...

Что означает двойное двоеточие в vector<int>::iterator it ?
Никак не могу понять как взаимоувязаны две сущности: контейнеры и итераторы. ...


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

Или воспользуйтесь поиском по форуму:
24
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2022, CyberForum.ru