![]() |
Модераторы: Daevaorn |
![]() ![]() ![]() |
|
Alek86 |
|
|||
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1299 Регистрация: 30.1.2007 Где: Киев Репутация: 21 Всего: 25 |
скрпировал с прошлой своей темы, так как этот вопрос к ней не относится
тут встретился такой класс
что случится, если я сделаю Document doc; View view1(doc); View view2(view1); // ??? View view3(doc); view3 = view1; // ??? это что, ошибка при создании класса (из-за того, что писали его не как реальный)? просто такое "упущение" я встречаю не первый раз в умных источниках или тут вообще никакого упущения нет? |
|||
|
||||
srd |
|
|||
![]() Нереварин ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 951 Регистрация: 30.8.2003 Где: Владивосток Репутация: 27 Всего: 49 |
Для подобных классов компилятор не генерирует конструктор копирования и оператор присваивания по умолчанию. Соответственно, строчки // ??? компилироваться не будут
![]() -------------------- Не смей читать мою подпись!!! |
|||
|
||||
Alek86 |
|
||||
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1299 Регистрация: 30.1.2007 Где: Киев Репутация: 21 Всего: 25 |
VS 2005 компилирует Добавлено @ 20:49 так
не компилит, правда, но все же Это сообщение отредактировал(а) Alek86 - 21.12.2007, 20:50 |
||||
|
|||||
srd |
|
|||
![]() Нереварин ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 951 Регистрация: 30.8.2003 Где: Владивосток Репутация: 27 Всего: 49 |
Ага, ошибся. Конструктор копирования всё-таки генерируется и работает. Хотя, для меня это неожиданно.
-------------------- Не смей читать мою подпись!!! |
|||
|
||||
crazy_hand |
|
|||
Новичок Профиль Группа: Участник Сообщений: 22 Регистрация: 12.12.2007 Где: Санкт-Петербург Репутация: нет Всего: нет |
Может я чего-то не понимаю, но:
Alek86, если ты так сделаешь - то будет ошибка, так как там чисто виртуальная функция. srd, конструктор копирования и оператор присваивания всегда для классов автоматически создаются. Поправьте, если я не прав. |
|||
|
||||
archimed7592 |
|
||||
![]() Архимед ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2531 Регистрация: 12.6.2004 Где: Moscow Репутация: 58 Всего: 93 |
crazy_hand, причём тут виртуальные ф-ции? 0_о
Создаются не всегда. Есть несколько правил, когда они неявно объявляются, когда неявно определяются. В двух словах: неявно объявляются всегда, кроме случая, когда пользователь сам написал свой КК/ОП. Неявно объявленный КК/ОП неявно определяется при попытке явно или неявно вызвать его(КК/ОП). Неявное определение КК выглядит как
Если такое определение по тем или иным причинам некорректно, то программа некорректна. ОП выглядит так:
Соответственно, в случае члена-ссылки, ОП будет некорректен и при любой попытке его использовать получишь еггог. Если хочешь более подробно, то читай соответствующий раздел Стандарта(там целый подпункт "special member functions"). -------------------- 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 |
||||
|
|||||
crazy_hand |
|
||||||||
Новичок Профиль Группа: Участник Сообщений: 22 Регистрация: 12.12.2007 Где: Санкт-Петербург Репутация: нет Всего: нет |
archimed7592
В первом посте:
-Ну это само собой.
Это всё очевидно для меня. Не понял вообще к чему ты это всё писал?! Вот только у меня вопрос: в чем логика того, что неявный ОП не работает с элементами ссылками? |
||||||||
|
|||||||||
Alek86 |
|
||||||
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1299 Регистрация: 30.1.2007 Где: Киев Репутация: 21 Всего: 25 |
хорошо заметил ![]() но все равно, там же чуть ниже
так что вопрос оставался бы в силе. если б на него не ответили
в том, что ссылку невозможно переназначить Добавлено @ 11:30
вопрос-то я задавал ![]() Это сообщение отредактировал(а) Alek86 - 22.12.2007, 11:31 |
||||||
|
|||||||
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 |
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | C/C++: Общие вопросы | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |