![]() |
Модераторы: bsa |
![]() ![]() ![]() |
|
zim22 |
|
||||
![]() depict1 ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2682 Регистрация: 15.1.2009 Где: Украина Репутация: 29 Всего: 69 |
mes, спасибо!
так как mes написал. В списке инициализации. Вот чуть поинтересней код: Если в функции print() обращаться к string, а не к int, то программа упадёт.
|
||||
|
|||||
Fazil6 |
|
||||
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1653 Регистрация: 3.5.2006 Где: Минск Репутация: 7 Всего: 60 |
читаем ветку сначала. Инициализация - это вызов конструктора. Речь не о инициализации конкретных членов класса , а о инициализации объекта класса, как чего-то цельного и неделимого. Это включает уже в себя инициализацию отдельных членов. Иначе как в конструкторе как это делать? что тут сложного?
вот я и простандартизировал.
согласен. Вот для меня совершенно логично, что пользоваться объектом можно после вызова конструктора. Ведь пока автомобиль не сошел с конвейера им пользуются исключительно так же как и конструктор "пользуется" объектом во время его "создания". Когда сошел с конвейера (читай вышлри из конструктора) можно пользоваться! Ура!!! ... смотря конечно какой автомобиль... |
||||
|
|||||
mes |
|
|||
любитель ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 7954 Регистрация: 14.1.2006 Репутация: 79 Всего: 250 |
имхо, в противном случае (если автомобилем нельзя пользоваться после того, как он сошел с контейнера) вина конструктора, а не автомобиля ![]() Добавлено @ 11:33
естественно, s еще не создана ![]() чтоб решить эту проблему , нужно поменять х и s местами.. (хотя подобные трюки лучше не использовать) ![]() Это сообщение отредактировал(а) mes - 9.4.2009, 11:35 |
|||
|
||||
Fazil6 |
|
|||
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1653 Регистрация: 3.5.2006 Где: Минск Репутация: 7 Всего: 60 |
с технической точки зрения - он создан. Ведь указатель (который и является членом класса) уже создан. И он куда-то даже указывает (то на что он указывает ведь членом класса не является). И им можно пользоваться (например присвоить ему значение). Но то на что он должен по логике вещей указывать еще нет. Вот и считается, что объект создан, когда вызвался конструктор. Ты ведь как пользователь не обязан знать как настраивается объект. Значит если вызвался конструктор, то все необходимые приготовления к использованию сделаны (сделаны они на самом деле или нет, надо их было делать или нет - пользователь за это не отвечает. И не должен отвечать) и ты как пользователь сделал все что обязан был (сказал что-то типа "эй ты, созайся вот таким способом"). |
|||
|
||||
zim22 |
|
|||
![]() depict1 ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2682 Регистрация: 15.1.2009 Где: Украина Репутация: 29 Всего: 69 |
||||
|
||||
Anikmar |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2513 Регистрация: 26.11.2006 Где: Санкт-Петербург Репутация: 5 Всего: 59 |
Вот я именно про это и говорил. С одной стороны можно пользоваться объектами вообще без конструктора (простой класс, в котором все члены имеют собственные конструкторы). Так что - если нет конструктора - объект не создан? С другой стороны наличие конструктора не гарантирует работоспособность объекта - т.к. все зависит от конкретики. Почему я и сказал, что стандартизировать здесь сложно - все зависит от конкретной ситуации. А касаемо собственно обсуждения - говорить, что в теле конструктора объект не создан (собственно с чего начиналась тема) как-то неправильно - все зависит от объекта. |
|||
|
||||
zim22 |
|
|||
![]() depict1 ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2682 Регистрация: 15.1.2009 Где: Украина Репутация: 29 Всего: 69 |
||||
|
||||
Anikmar |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2513 Регистрация: 26.11.2006 Где: Санкт-Петербург Репутация: 5 Всего: 59 |
Бесспорно. Я согласен полностью с этим: А по поводу плюсов и минусов - человеку, получившему возможность показать свою значимость хочется потешить собственное самолюбие. Это я про UnrealMan. Ставить - Lazin-у - это просто смешно. Ставить минус мне, не участвуя в теме - это просто некорректно. Ну мне это, если честно, по барабану ![]() |
|||
|
||||
zim22 |
|
|||
![]() depict1 ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2682 Регистрация: 15.1.2009 Где: Украина Репутация: 29 Всего: 69 |
Anikmar, что интересней всего, UnrealMan даже не пытается понять точку зрения собеседника. Тупо ставит минусы
![]()
кстати, а вы знали, что компилятор также создаст синтезируемый деструктор, даже в том случае, если вы его всё-равно явно создадите. Т.е. в классе существует как минимум 1, а если вы определили свой - то два деструктора ![]() |
|||
|
||||
Anikmar |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2513 Регистрация: 26.11.2006 Где: Санкт-Петербург Репутация: 5 Всего: 59 |
Нет, если честно. А что тогда делает синтетик? Просто вызывает что-то вроде free? |
|||
|
||||
zim22 |
|
|||
![]() depict1 ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2682 Регистрация: 15.1.2009 Где: Украина Репутация: 29 Всего: 69 |
Из книжки: Важное различие между деструктором и конструктором копий(или оператором присвоения) заключается в том, Что даже при наличии собственного деструктора, синтезируемый деструктор все равно выполняется. Например, для класса Sales_item можно создать следующий пустой деструктор:
При удалении объектов класса Sales_item этот деструктор (определённый нами) ничего не делает. После того, как он завершает работу, выполняется синтезируемый деструктор, который и удаляет все переменный-члены класса. Синтезируемый деструктор удаляет переменную-член типа string, вызывая деструктор класса string, который освобождает область памяти, используемой для хранения переменной isbn. Переменные-члены units_sold и revenue имеют встроенный тип, поэтому для их удаления синтезируемый деструктор ничего не делает. Это сообщение отредактировал(а) zim22 - 9.4.2009, 17:19 |
|||
|
||||
vinter |
|
|||
![]() Explorer ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2735 Регистрация: 1.4.2006 Где: Н.Новгород Репутация: 8 Всего: 56 |
Lazin, не прав в своей фразе, оговорка достаточно серьезная, точнее во второй ее части. А ставить за это минус, или нет это дело каждого. Для этого репутация и существует. |
|||
|
||||
and277 |
|
|||
Шустрый ![]() Профиль Группа: Участник Сообщений: 59 Регистрация: 9.4.2009 Репутация: нет Всего: нет |
Интересно а если я в main в первую очередь допустим объявлю указатель на объект. Конструктор при создании этого указателя запустится? Если да- то что он проинициализирует?
Или просто указателю инициализируется каким то адресом и все... До присвоения объекта этому указателю.... Извеняюсь заранее за сумбурность. Это сообщение отредактировал(а) and277 - 9.4.2009, 18:31 |
|||
|
||||
Anikmar |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2513 Регистрация: 26.11.2006 Где: Санкт-Петербург Репутация: 5 Всего: 59 |
Если просто объявите - никаких конструкторв не вызовется, пока не создадите объект оператором new ![]() Нормально, если человек оспорит фразу, чтобы все видели спор и получали дополнительные знания. Вы не меньше меня на форуме и знаете, что репутация в минус ставится за досаточно серьезные нарушения - грубость, введение в заблуждение и т.п. При этом нормальные люди не тихарят, а пишут об этом в посте. Конечно очки, баллы - это все похоже на детскую игру, но если уж в нее играем - почему не придерживаться неписанных правил? Lazin и без всякой репутации имеет авторитет - достаточно проследить несколько тем с его участием. А вот тихарщик, который только и делает, что ставит минусы лично для меня авторитета не представляет, пусть он в тысячу раз лучше меня программирует. ИМХО, естественно. Хотя некоторую долю развлекухи он своими минусами сегодня внес ![]() |
|||
|
||||
Rififi |
|
|||
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1254 Регистрация: 9.3.2008 Репутация: 3 Всего: 36 |
минусы, плюсы... детский сад, штаны на лямках
![]() |
|||
|
||||
![]() ![]() ![]() |
Правила форума "C/C++: Для новичков" | |
|
Запрещается! 1. Публиковать ссылки на вскрытые компоненты 2. Обсуждать взлом компонентов и делиться вскрытыми компонентами
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, JackYF, bsa. |
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | C/C++: Для новичков | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |