![]() |
Модераторы: Daevaorn |
![]() ![]() ![]() |
|
medveghonka |
|
|||
Новичок Профиль Группа: Участник Сообщений: 13 Регистрация: 21.5.2007 Репутация: нет Всего: нет |
Не могли рассказать про конструктор копирования и неинициализирующий конструктор??
|
|||
|
||||
Voldemar2004 |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1650 Регистрация: 25.12.2004 Репутация: нет Всего: 23 |
medveghonka, а поиск для чего ?
![]() -------------------- i_i (';') (V) ![]() |
|||
|
||||
archimed7592 |
|
|||
![]() Архимед ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2531 Регистрация: 12.6.2004 Где: Moscow Репутация: 58 Всего: 93 |
-------------------- If you have an apple and I have an apple and we exchange apples then you and I will still each have one apple. But if you have an idea and I have an idea and we exchange these ideas, then each of us will have two ideas. © George Bernard Shaw |
|||
|
||||
zkv |
|
|||
![]() ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 2133 Регистрация: 23.7.2006 Где: Санкт-Петербург Репутация: 26 Всего: 92 |
||||
|
||||
BigHeart |
|
|||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 51 Регистрация: 17.3.2007 Репутация: нет Всего: нет |
нееее...
это просто конструктор, который ничего не инициализирует ![]() |
|||
|
||||
archimed7592 |
|
|||
![]() Архимед ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2531 Регистрация: 12.6.2004 Где: Moscow Репутация: 58 Всего: 93 |
BigHeart,
-------------------- If you have an apple and I have an apple and we exchange apples then you and I will still each have one apple. But if you have an idea and I have an idea and we exchange these ideas, then each of us will have two ideas. © George Bernard Shaw |
|||
|
||||
apook |
|
||||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 794 Регистрация: 12.7.2006 Репутация: 9 Всего: 23 |
пустой конструктор ![]()
-------------------- Мои руки из дуба, голова из свинца ну и пусть ... |
||||
|
|||||
zkv |
|
|||
![]() ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 2133 Регистрация: 23.7.2006 Где: Санкт-Петербург Репутация: 26 Всего: 92 |
apook, а пустой оператор обязателен внутри конструктора?
![]() |
|||
|
||||
apook |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 794 Регистрация: 12.7.2006 Репутация: 9 Всего: 23 |
Но ведь пустой конструктор инициализирующий ничто получился, а это сходно по смыслу ничего не инициализирующий... -------------------- Мои руки из дуба, голова из свинца ну и пусть ... |
|||
|
||||
JackYF |
|
|||
![]() полуавантюрист ![]() ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 5814 Регистрация: 28.8.2004 Где: страна тысячи озё р Репутация: 18 Всего: 162 |
apook, он неявно вызовет конструкторы по-умолчанию полей данных. Так что...
|
|||
|
||||
Voldemar2004 |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1650 Регистрация: 25.12.2004 Репутация: нет Всего: 23 |
Может быть medveghonka спрашивает про конструктор по умолчанию?
![]()
-------------------- i_i (';') (V) ![]() |
|||
|
||||
apook |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 794 Регистрация: 12.7.2006 Репутация: 9 Всего: 23 |
Скорее всего неинициализурующих конструктроро тогда получается не существует так называемый пустой конструктор инициализирует все данные члены класса нулями -------------------- Мои руки из дуба, голова из свинца ну и пусть ... |
|||
|
||||
archimed7592 |
|
||||
![]() Архимед ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2531 Регистрация: 12.6.2004 Где: Moscow Репутация: 58 Всего: 93 |
ну эт ты загнул... строку нулём не инициализируешь... её можно только инициализировать значением по умолчанию(default-initialize) насчёт "пустого" конструктора - он не инициализирует только поле i.
-------------------- If you have an apple and I have an apple and we exchange apples then you and I will still each have one apple. But if you have an idea and I have an idea and we exchange these ideas, then each of us will have two ideas. © George Bernard Shaw |
||||
|
|||||
Fazil6 |
|
|||
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1653 Регистрация: 3.5.2006 Где: Минск Репутация: 35 Всего: 60 |
||||
|
||||
apook |
|
||||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 794 Регистрация: 12.7.2006 Репутация: 9 Всего: 23 |
Я имел ввиду конструктор по умолчанию который вызывается компилятором автоматически
Насколько я знаю ноль он и для строки ноль, а NULL название для удобства NULL-это ноль, вообще-то что то где-то слышал о том что NULL это не ноль, а вообще нкак-бы ничто пустота, но на деле мне кажется что NULL, это ноль да и опять-же попадалась такая информация, я конечно не берусь настаивать, но вот как можно забить так сказать пустотой(для строк) или нулями некую структуру неважно какого типа в ней данные... memset( structname, 0, sizeof(structname) ); -------------------- Мои руки из дуба, голова из свинца ну и пусть ... |
||||
|
|||||
archimed7592 |
|
||||||
![]() Архимед ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2531 Регистрация: 12.6.2004 Где: Moscow Репутация: 58 Всего: 93 |
угу... речь не про char *, вообще то... ну да ладно
во-вторых, речь не о том, как это можно сделать, а про неинициализирующий конструктор. -------------------- If you have an apple and I have an apple and we exchange apples then you and I will still each have one apple. But if you have an idea and I have an idea and we exchange these ideas, then each of us will have two ideas. © George Bernard Shaw |
||||||
|
|||||||
Fazil6 |
|
||||
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1653 Регистрация: 3.5.2006 Где: Минск Репутация: 35 Всего: 60 |
|
||||
|
|||||
Xenon |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 1529 Регистрация: 12.4.2006 Репутация: 11 Всего: 50 |
apook Ну у std::string нет коструктора с int, поэтому 0 простой не сгодится. А от такого прога вообще загнется
![]()
А на счет нуля - это ты читал на rsdn, но Visual Studio рассматривает это просто как define. И эти приколы с пустотами вроде только в С были. Добавлено через 4 минуты и 9 секунд А по поводу default-initialization и value-initialization здесь |
|||
|
||||
dead_psh |
|
||||
Новичок Профиль Группа: Участник Сообщений: 34 Регистрация: 13.3.2007 Репутация: нет Всего: нет |
а копирующий конструктор это конструктор вида
а применяется например вот так
|
||||
|
|||||
Xenon |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 1529 Регистрация: 12.4.2006 Репутация: 11 Всего: 50 |
... или
|
|||
|
||||
apook |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 794 Регистрация: 12.7.2006 Репутация: 9 Всего: 23 |
Так что-же такое неинициализирующий конструктор? Если любой конструктор что-то инициализирует, то неинициализирующий конструктор -- это тот который не вызывается там где вроде-бы должен, короче его нету. ![]() Я прочитал половину книги "C++для чайников" и там узнал что конструктор по умолчанию вызывается C++ -ом для совместимости c Си и заполняет все нафиг нулями -------------------- Мои руки из дуба, голова из свинца ну и пусть ... |
|||
|
||||
Xenon |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 1529 Регистрация: 12.4.2006 Репутация: 11 Всего: 50 |
apook, смотря для каких типов и какой ... вот здесь, говорю, написано link
|
|||
|
||||
archimed7592 |
|
|||
![]() Архимед ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2531 Регистрация: 12.6.2004 Где: Moscow Репутация: 58 Всего: 93 |
такого не существует
хотя, не исключено, что ты просто из контекста выдрал - сказанное там справедливо для POD'ов(правда в Си, AFAIK, структуры не инициализировались нулями) -------------------- If you have an apple and I have an apple and we exchange apples then you and I will still each have one apple. But if you have an idea and I have an idea and we exchange these ideas, then each of us will have two ideas. © George Bernard Shaw |
|||
|
||||
Fazil6 |
|
||||
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1653 Регистрация: 3.5.2006 Где: Минск Репутация: 35 Всего: 60 |
конструктор инициализирует только то, что указано в списке инициализации.
|
||||
|
|||||
apook |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 794 Регистрация: 12.7.2006 Репутация: 9 Всего: 23 |
to dead_psh кстати в копирующем конструкторе надо однако осуществить проверку
на копирование себя -------------------- Мои руки из дуба, голова из свинца ну и пусть ... |
|||
|
||||
Xenon |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 1529 Регистрация: 12.4.2006 Репутация: 11 Всего: 50 |
Fazil6, но вызванные конструкторы по умолчанию переменных-членов такую операцию произвести могут? Ну я не про POD естественно. То есть s в твоем случае должно быть иницилизировано чем-то, ведь и std::string есть конструктор по-умолчанию.
Это сообщение отредактировал(а) Xenon - 11.6.2007, 17:16 |
|||
|
||||
Fazil6 |
|
|||
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1653 Регистрация: 3.5.2006 Где: Минск Репутация: 35 Всего: 60 |
ну есть конструктор пумолчанию у string ну и что? Никакого отношения к конструктору A1(){} он не имеет и значения внутри объекта s зависят только от конструктора string. В таком классе может быть точно такойже конструктор поумолчанию, который ничего явно не инициализирует и получить вполне мусорное значение в s. |
|||
|
||||
archimed7592 |
|
|||
![]() Архимед ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2531 Регистрация: 12.6.2004 Где: Moscow Репутация: 58 Всего: 93 |
м.б. ты имеешь ввиду оператор присваивания? Добавлено через 1 минуту и 2 секунды имхо неявная инициализация не означает её отсутствия -------------------- If you have an apple and I have an apple and we exchange apples then you and I will still each have one apple. But if you have an idea and I have an idea and we exchange these ideas, then each of us will have two ideas. © George Bernard Shaw |
|||
|
||||
Xenon |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 1529 Регистрация: 12.4.2006 Репутация: 11 Всего: 50 |
Fazil6, ну все равно объект типа string сконструируется и будет неявная его иницилизация и утверждать, что тот конструктор класса ничего ЯВНО не иницилизирует, следовательно никакой иницилизация объектов не будет - нельзя, ведь тот же string будет проиницилизирован опираясь на свой конструктор по умолчанию и это будет неявной иницилизацией. Мусора-то при выводе я не вижу.
Добавлено @ 18:03 apook, проверку на присваивание самому себе делают в operator = Это сообщение отредактировал(а) Xenon - 11.6.2007, 18:04 |
|||
|
||||
apook |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 794 Регистрация: 12.7.2006 Репутация: 9 Всего: 23 |
Ну да а я что говорю, а ну = а что можно же.. а ну да, пойду ка отдохну лучше... -------------------- Мои руки из дуба, голова из свинца ну и пусть ... |
|||
|
||||
BigHeart |
|
|||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 51 Регистрация: 17.3.2007 Репутация: нет Всего: нет |
ну хорошо. Допустим, мы не написали конструктор для класса, но во всех книгах написано, что если программист не создал конструктора,
то компилятор его создаст самостоятельно. Какой код будет в этом конструкторе? всё поля инициализируется нулями? |
|||
|
||||
zkv |
|
|||
![]() ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 2133 Регистрация: 23.7.2006 Где: Санкт-Петербург Репутация: 26 Всего: 92 |
BigHeart, ответ на твой вопрос уже дал Fazil6.
|
|||
|
||||
Fazil6 |
|
|||
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1653 Регистрация: 3.5.2006 Где: Минск Репутация: 35 Всего: 60 |
Вопервых если неопределен конструктор поумолчанию, то невсегда компилятор будет его генерить. Например, если определены другие конструкторы. Во-вторых при вызове конструктора поумолчанию значения полей пользовательских типов будут зависеть от их конструкторов поумолчанию. Поля встроенных типов будут содержать случайные значения, кроме случая когда объект создается выражением
и при этом конструктор поумолчанию отдан на откуп компилятору т.е. чтобы поля встроенных типов были гарантировано обнулены без списка инициализации нужно чтобы все звезды сошлись без вариантов. Это сообщение отредактировал(а) Fazil6 - 12.6.2007, 01:08 |
|||
|
||||
BigHeart |
|
|||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 51 Регистрация: 17.3.2007 Репутация: нет Всего: нет |
неее... Стоп. Мужчины, мы как бы начали с того, что нет такого определения, как неинициализирующий конструктор.
( по крайней мере про него никто не слышал ![]() Теперь мы разбираемся, может ли конструктор ничего не инициализировать, правильно? Добавлено через 2 минуты и 41 секунду и зачем ваабще он тогда нужен? |
|||
|
||||
BigHeart |
|
||||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 51 Регистрация: 17.3.2007 Репутация: нет Всего: нет |
Харви Дейтел |
||||
|
|||||
zkv |
|
|||
![]() ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 2133 Регистрация: 23.7.2006 Где: Санкт-Петербург Репутация: 26 Всего: 92 |
||||
|
||||
JackYF |
|
|||
![]() полуавантюрист ![]() ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 5814 Регистрация: 28.8.2004 Где: страна тысячи озё р Репутация: 18 Всего: 162 |
Этого компилятор не делает точно. Кстати, для невстроенных типов данная операция очень может привести к невалидности данной переменной, то есть с ней невозможно будет работать. да, но куда ты этот ноль впихнешь? А NULL по значению 0 и есть. |
|||
|
||||
apook |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 794 Регистрация: 12.7.2006 Репутация: 9 Всего: 23 |
Я извиняюсь зачем его куда-то впихивать, это не мое дело. к примеру
впихнул что-ли ![]() насчет невалидности Почему? Ведь параметр приводится к типу void т.е не зависит от типа данных Это сообщение отредактировал(а) apook - 12.6.2007, 14:56 -------------------- Мои руки из дуба, голова из свинца ну и пусть ... |
|||
|
||||
JackYF |
|
|||
![]() полуавантюрист ![]() ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 5814 Регистрация: 28.8.2004 Где: страна тысячи озё р Репутация: 18 Всего: 162 |
apook, я имел в виду std::string. Попробуй-ка его занули...
Или попробуй инициализировать нулем. |
|||
|
||||
apook |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 794 Регистрация: 12.7.2006 Репутация: 9 Всего: 23 |
Да здесь уже об этом говорили в самом начале -------------------- Мои руки из дуба, голова из свинца ну и пусть ... |
|||
|
||||
Ulysses4j |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 304 Регистрация: 6.6.2007 Где: Ростов-на-Дону Репутация: 4 Всего: 10 |
Послушайте, может, я один какой-то ущербный: у меня такую строку, и VC 8.0, и MinGW компилируют прекрасно (на /W4 и -Wall, соответственно, ни одного предупреждения). А во время выполнения вылетают. Это сообщение отредактировал(а) Ulysses4j - 12.6.2007, 16:46 -------------------- Communication is critical to the job of a programmer. C. Jazdzewski. Fatherly Advice To New Programmers |
|||
|
||||
archimed7592 |
|
|||
![]() Архимед ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2531 Регистрация: 12.6.2004 Где: Moscow Репутация: 58 Всего: 93 |
ах, да... implicit constructor string::string(const char *).
Ulysses4j, не волнуйся... ты не ущербный, но писать так всё равно не нужно...
-------------------- If you have an apple and I have an apple and we exchange apples then you and I will still each have one apple. But if you have an idea and I have an idea and we exchange these ideas, then each of us will have two ideas. © George Bernard Shaw |
|||
|
||||
medveghonka |
|
|||
Новичок Профиль Группа: Участник Сообщений: 13 Регистрация: 21.5.2007 Репутация: нет Всего: нет |
Вопрос в точности звучал:дать определение неинициализирующего конструктора.....
|
|||
|
||||
Xenon |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 1529 Регистрация: 12.4.2006 Репутация: 11 Всего: 50 |
Ulysses4j, ну именно с 0 скопилируется, только потом вылетит на этапе выполнения при попытке сделать strlen
![]() |
|||
|
||||
archimed7592 |
|
|||
![]() Архимед ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2531 Регистрация: 12.6.2004 Где: Moscow Репутация: 58 Всего: 93 |
![]() -------------------- If you have an apple and I have an apple and we exchange apples then you and I will still each have one apple. But if you have an idea and I have an idea and we exchange these ideas, then each of us will have two ideas. © George Bernard Shaw |
|||
|
||||
![]() ![]() ![]() |
Правила форума "С++:Общие вопросы" | |
|
Добро пожаловать!
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn |
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | C/C++: Общие вопросы | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |