![]() |
|
Модераторы: bsa |
![]()
|
|
| yngwie19 |
|
||||||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 829 Регистрация: 15.6.2008 Где: Новгород Репутация: нет Всего: нет |
Вылетает если в main объекты объявлять так: первый объект с умолчанием, второй с аргументом
а если наоборот
то все нормально Это сообщение отредактировал(а) yngwie19 - 13.10.2008, 20:48 |
||||||
|
|||||||
| mes |
|
|||
|
любитель ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 7954 Регистрация: 14.1.2006 Репутация: 79 Всего: 250 |
||||
|
||||
| J0ker |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 986 Регистрация: 17.9.2008 Репутация: 9 Всего: 14 |
у копии-то валидный невалидный он становится для оригинала после вызова деструктора у копии - т.е. при разрушении оригинала в delete[] передается уже дохлый указатель |
|||
|
||||
| yngwie19 |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 829 Регистрация: 15.6.2008 Где: Новгород Репутация: нет Всего: нет |
скасибо, все понятно, а скажите пожалуйста почему
Array integers(7) и Array integers = 7 одно и то же ??? |
|||
|
||||
| IKM2007 |
|
|||
![]() Зима близко ![]() ![]() Профиль Группа: Участник Сообщений: 702 Регистрация: 26.4.2008 Где: olmedreca Репутация: 3 Всего: 40 |
Да. -------------------- "К чёрту обстоятельства, я создаю возможности." Брюс Ли |
|||
|
||||
| vinter |
|
|||
![]() Explorer ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2735 Регистрация: 1.4.2006 Где: Н.Новгород Репутация: 8 Всего: 56 |
это не одно и тоже, в первом случае это конструктор, во втором копирующий конструктор
|
|||
|
||||
| IKM2007 |
|
||||
![]() Зима близко ![]() ![]() Профиль Группа: Участник Сообщений: 702 Регистрация: 26.4.2008 Где: olmedreca Репутация: 3 Всего: 40 |
vinter, если не ошибаюсь, конструктор копии вызывается, когда копируется другой обьект класса. Например так:
что эквивалентно
-------------------- "К чёрту обстоятельства, я создаю возможности." Брюс Ли |
||||
|
|||||
| yngwie19 |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 829 Регистрация: 15.6.2008 Где: Новгород Репутация: нет Всего: нет |
vinter, в моем коде нет copy constructor, однако эти две формы работают одинаково.
IKM2007, Дак почему собственно это одинаково, объясни пожалуйста подробнее. |
|||
|
||||
| IKM2007 |
|
||||||
![]() Зима близко ![]() ![]() Профиль Группа: Участник Сообщений: 702 Регистрация: 26.4.2008 Где: olmedreca Репутация: 3 Всего: 40 |
А что обьяснять? Принимай как есть. Например пишешь.
эквивалентно
-------------------- "К чёрту обстоятельства, я создаю возможности." Брюс Ли |
||||||
|
|||||||
| J0ker |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 986 Регистрация: 17.9.2008 Репутация: 9 Всего: 14 |
копиконстрактор и оператор присвоения генерируются компилятором если их не писать специально выражение Array x = 7; приводит к вызову конструктора Array(7) - это оптимизация однако код Array x; x = 7; не является эквивалентным Добавлено через 10 минут и 54 секунды кстати, вам нужно либо написать оператор присвоения и копиконстрактор, либо запретить их выносом в приватную секцию Это сообщение отредактировал(а) J0ker - 13.10.2008, 22:39 |
|||
|
||||
| yngwie19 |
|
||||||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 829 Регистрация: 15.6.2008 Где: Новгород Репутация: нет Всего: нет |
последний вопрос по поводу перегрузки операции индексации.
Сообственно определение функции такое:
Вопрос в том, почему когда в main пишем например
То все правильно работает, ведь судя из определения функции нужно писать так:
|
||||||
|
|||||||
| J0ker |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 986 Регистрация: 17.9.2008 Репутация: 9 Всего: 14 |
такой функции быть не может operator[] должен быть мембером класса во-вторых видимо он у вас должен возвращать ссылку на элемент массива - int &
потому, что это оператор - у него синтаксис такой Добавлено через 55 секунд и я вам настоятельно рекомендую закончить с оператором присвоения и копиконстрактором - иначе будут проблемы |
|||
|
||||
| yngwie19 |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 829 Регистрация: 15.6.2008 Где: Новгород Репутация: нет Всего: нет |
J0ker, Спасибо, сори действительно перепутал, нужно int&, т.е если Я правильно понимаю, то когда мы пишеи integer[7], то при компиляции генерируется integer.operator[](7) ?
|
|||
|
||||
| J0ker |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 986 Регистрация: 17.9.2008 Репутация: 9 Всего: 14 |
да собственно вы можете это даже явно написать если хочется изврата |
|||
|
||||
| vinter |
|
||||||
![]() Explorer ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2735 Регистрация: 1.4.2006 Где: Н.Новгород Репутация: 8 Всего: 56 |
на основании чего сделан такой вывод? Подсветка кода соптимизировала?
вот, что это: а теперь сделаем так:
и ваш код не будет компилироваться Это сообщение отредактировал(а) vinter - 14.10.2008, 05:06 |
||||||
|
|||||||
| IKM2007 |
|
|||
![]() Зима близко ![]() ![]() Профиль Группа: Участник Сообщений: 702 Регистрация: 26.4.2008 Где: olmedreca Репутация: 3 Всего: 40 |
Ну, если запретить неявное преобразование типов, то да. Просто в том случае эти два выражения были эквивалентны....Да, был не прав, насчет коструктора копии.
-------------------- "К чёрту обстоятельства, я создаю возможности." Брюс Ли |
|||
|
||||
| J0ker |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 986 Регистрация: 17.9.2008 Репутация: 9 Всего: 14 |
на основании стандарта 12.6.1/1 Добавлено @ 06:05 а прикиньте, какие замечательные возможности таят в себе точки с запятой - убери практически любую - и тоже не будет компилиться Это сообщение отредактировал(а) J0ker - 14.10.2008, 06:05 |
|||
|
||||
| vinter |
|
|||
![]() Explorer ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2735 Регистрация: 1.4.2006 Где: Н.Новгород Репутация: 8 Всего: 56 |
стандарт не более чем рекомендация, нельзя ничего утверждать на основании бумажки ;)
J0ker, оставь свое детское ехидство для себе подобных. |
|||
|
||||
| J0ker |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 986 Регистрация: 17.9.2008 Репутация: 9 Всего: 14 |
правда что-ль? хотя в данном случае ты прав - данный параграф разрешает делать такую оптимизацию, а не требует однако во всех приличных компиляторах это выполняется, т.к. это вопрос оптимизации я бы с удовольствием, вот только не получается с мне подобными ехидничать - они куйню пишут исключительно редко |
|||
|
||||
![]()
|
| Правила форума "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. |