|
2 / 2 / 0
Регистрация: 29.12.2009
Сообщений: 167
|
|||||||||||
оператор присваивания11.10.2010, 21:10. Показов 2721. Ответов 12
Метки нет (Все метки)
Привет всем !
Каким образом вызывается оператор присваивания, например, здесь:
Может быть дело в operator char*(), но в ответе operator char() вызывается после присваивания: Компилятор выводит : Vizivaetsja operator prisvaivanija Vizivaetsja operator prisvaivanija Vizivaetsja operator prisvaivanija Vizvalsja operator char* ...
0
|
|||||||||||
| 11.10.2010, 21:10 | |
|
Ответы с готовыми решениями:
12
Для шаблонного класса перегрузить оператор присваивания, copy-конструктор, объекты cin и cout, оператор * Оператор присваивания.
|
|
|
|
| 11.10.2010, 21:24 | |
|
Вызывается неявно конструктор String( const char* ), потом копирование двух String'ов.
0
|
|
|
2 / 2 / 0
Регистрация: 29.12.2009
Сообщений: 167
|
||||||||||||
| 12.10.2010, 02:42 [ТС] | ||||||||||||
|
Добавлено через 4 часа 5 минут
0
|
||||||||||||
|
2 / 2 / 0
Регистрация: 29.12.2009
Сообщений: 167
|
|||||||||||||||||||||
| 31.10.2010, 08:58 [ТС] | |||||||||||||||||||||
|
Почему в коде ниже вызывается конструктор копирования, а не оператор присваивания
Вообще есть правило, что если идет присваивание к уже существуемому объекту, то должен вызываться оператор присваивания пр
Теперь у меня возникает проблема, если следовать этом правилам, то почему у здесь
Если нужен код Fraction.h вот он
0
|
|||||||||||||||||||||
|
быдлокодер
1724 / 911 / 106
Регистрация: 04.06.2008
Сообщений: 5,698
|
|||||||||||||||||||||||||||||||||||||||||
| 31.10.2010, 13:15 | |||||||||||||||||||||||||||||||||||||||||
|
Давай с последним примером разбираться, я щас над ним тоже парюсь, у меня вопросы похожие.
1) Почему вызывается не оператор присваивания Ты наверное, имеешь ввиду этот код
"Функция оператора присваивания является специальной функцией, потому что компилятор сам её подставляет, если вы не делаете этого" Ну вроде пока всё понятно должно быть. Уточняй если что не так. 2) К тому же конструктор копирования действительно вызывается. Ты имеешь ввиду этот?
ситуации, когда вызывается конструктор копирования АВТОМАТИЧЕСКИ, то есть ты не прописываешь его вызов, а н вызывается 1) Когда возвращаемое значение имеет тип класса и так далее В даном случае add возвращает переменную типа Fraction, поэтому конструктор копирования всё-таки вызывается (и должен вызываться), хоть мы этого и не видим (автоматически то есть) Ну как-то так. Коряво. Добавлено через 3 минуты А, не я соврал чуток. Ты же не пишешь какой именно код ты имеешь ввиду приходится додумывать самому Итак. f3= f1+ f2 При возвращении add значения вызывается (наверное) вот это конструктор копирования:
Добавлено через 2 часа 29 минут Но что действительно удивляет, так это почему не вызывается это конструктор копирования
"Конструктор копирования вызывается, когда аргумент имеет тип класса" Это и есть тот случай Аргумент тут f2, он имеетр тип FloatFraction, а, посколку add с таким классом работать не может, его надо привести к типу Fraction Вот и должен автоматом вышеупомянутый конструктор вызываться. Так не вызывается! Пишем так:
В чём дело, друзья?
0
|
|||||||||||||||||||||||||||||||||||||||||
|
2 / 2 / 0
Регистрация: 29.12.2009
Сообщений: 167
|
||||||||||||||||||||||
| 31.10.2010, 16:20 [ТС] | ||||||||||||||||||||||
|
Принцип работы:
Добавлено через 10 минут
0
|
||||||||||||||||||||||
|
быдлокодер
1724 / 911 / 106
Регистрация: 04.06.2008
Сообщений: 5,698
|
||||||||||||
| 31.10.2010, 16:29 | ||||||||||||
|
Ты описал пункт 1, 2 и 3. Я предлагаю обратиться к пункту 0 или даже -1
...Что происходит ДО выполнения этих трёх пунктов? Много чего. Но меня интересует f3=f1.add(f2) Ты ведь согласишься, что f1=f2+ f3 подменяется f3=f1.add(f2)? А теперь смотри, итак add(f2) В функцию add передаётся параметром объект f2. Вопрос: должен ПРИ ЭТОМ вызываться конструктор копирования? Ответ: да должен. За доказательсвтом лезем в книгу и читаем: "Ниже представлены ситуации, в которых конструктор копирования вызывается автоматически: 1) ПРопускаем эту ситуацию 2) Когда аргумент имеет тип класса. Создаётся копия аргумента и затем передаётся в функцию" Второй пункт это наша ситуация. Я хочу воочию убедиться, что конструктор копирования действительно вызван. Для этого я задаюсь вопросом: а какой именно конструктор копирования? А вот этот:
1) у него принимаемый аргумент имеет тип const FloatFraction &src (это соответствет f2 2) Этот конструктор "принадлежит" классу FloatFraction. Это как раз наша ситуация, ведь вся эта херь add(f2) "принадлежит" объекту класса FloatFraction- объекту f1. Действительно: f3=f1.add(f2) Ну то есть есть все основания, что ПРЕЖДЕ ЧЕМ выполнятся пункты, о которых ты сказал, вызовется вышеупомянутый конструктор копирования. Для того, чтобы в этом убедиться, как я уже сказал, пишем так:
Где ошибка в рассуждениях? Добавлено через 3 минуты
0
|
||||||||||||
|
2 / 2 / 0
Регистрация: 29.12.2009
Сообщений: 167
|
||||||
| 31.10.2010, 17:24 [ТС] | ||||||
0
|
||||||
|
быдлокодер
1724 / 911 / 106
Регистрация: 04.06.2008
Сообщений: 5,698
|
|||||||||||
| 31.10.2010, 17:58 | |||||||||||
|
Разве это имеет значение? Не знаю. Постараюсь исходить из сухих тык скыть фактов и опровергнуть сей аргумент
Во-первых, я уже приводил цитату из книги, согласно которой конструктор копирования ДОЛЖЕН вызываться в этом случае Во-вторых (этого я не говорил) далее в книге читаем: "Синтаксис для объявления конструктора следующий имя_класса (имя_класса const &источник)" То есть в качестве образца мы видим передачу именно ССЫЛКИ. Как ни крути, а аргумент, что раз ссылка, то конструктор вызываться не должен, не канает НАколнец, третье. Там есть ещё конструктор копирования. Вот он:
0
|
|||||||||||
|
654 / 575 / 164
Регистрация: 13.12.2012
Сообщений: 2,124
|
||
| 13.12.2012, 09:41 | ||
0
|
||
|
В астрале
8049 / 4806 / 655
Регистрация: 24.06.2010
Сообщений: 10,562
|
||||||||||||
| 13.12.2012, 10:54 | ||||||||||||
Итог: Вызов двух конструкторов копирования очевидным образом.
0
|
||||||||||||
|
быдлокодер
1724 / 911 / 106
Регистрация: 04.06.2008
Сообщений: 5,698
|
|
| 13.12.2012, 11:05 | |
|
Я разобрался давно уж вроде. Вывод: использование ссылки это по факту работа с указателем, но без синтаксиса указателя. Как в учебнике и написано.
0
|
|
|
654 / 575 / 164
Регистрация: 13.12.2012
Сообщений: 2,124
|
|
| 13.12.2012, 16:39 | |
|
Ссылка это альтернативное имя объекта, по которому можно к нему обращаться, и ссылка всегда инициализирована - другого не допустит компилятор, за исключением некоторых ситуаций, вызванных как раз таки не верныой работой с сылками)
0
|
|
| 13.12.2012, 16:39 | |
|
Помогаю со студенческими работами здесь
13
Оператор присваивания Оператор присваивания в c++ оператор присваивания Оператор присваивания Оператор присваивания Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
||||
|
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта
Симптом:
После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
|
Access
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
|
Новый ноутбук
volvo 07.12.2025
Всем привет.
По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне:
Ryzen 5 7533HS
64 Gb DDR5
1Tb NVMe
16" Full HD Display
Win11 Pro
|
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
|
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
|
|
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов
На странице:
https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/
нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
|
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов.
. . .
|
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
|
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
|
Создание Single Page Application на фреймах
krapotkin 16.11.2025
Статья исключительно для начинающих. Подходы оригинальностью не блещут.
В век Веб все очень привыкли к дизайну Single-Page-Application .
Быстренько разберем подход "на фреймах".
Мы делаем одну. . .
|