|
3 / 3 / 2
Регистрация: 07.02.2013
Сообщений: 185
|
||||||
Перегруженный оператор присваивания24.06.2015, 22:52. Показов 1282. Ответов 17
Метки нет (Все метки)
Достаточно информации прочитал, что такое перегруж. оператор присваивания, но не до конца понимаю суть данного вопроса - "в каком месте кода описывается то, что other является вторым аргументом оператора присваивания, собственно он является тем списком, который мы копируем в текущий список (это как вроде this)".
Этот код для однонаправленного кольцевого списка. Суть кода такова, что есть текущий список (this) и список, который мы копируем в текущий (other). В случае, когда у текущего списка будет больше элементов чем, в копируемом, то лишние элементы удаляются.
0
|
||||||
| 24.06.2015, 22:52 | |
|
Ответы с готовыми решениями:
17
Перегруженный оператор присваивания Не работает перегруженный оператор присваивания Не выполняется перегруженный оператор присваивания |
|
594 / 532 / 76
Регистрация: 22.03.2011
Сообщений: 1,585
|
|
| 24.06.2015, 23:29 | |
|
И в чем ваш вопрос?
this это указатель на объект для которого вызывается метод и неявно передается в любой метод, по этой причине other - второй аргумент.
1
|
|
|
3 / 3 / 2
Регистрация: 07.02.2013
Сообщений: 185
|
|
| 24.06.2015, 23:43 [ТС] | |
|
OstapBender, вопрос в том, как мне обьяснить человеку по коду или словесно, что other обязательно будет тем самым вторым аргументом (то есть копируемым списком).
0
|
|
|
594 / 532 / 76
Регистрация: 22.03.2011
Сообщений: 1,585
|
||
| 24.06.2015, 23:59 | ||
|
продемонстрировать же визуально "тот самый" первый аргумент this не предоставляется возможным, но можно показать, что перегрузка через внешнюю либо дружественную функцию невозможна - это одно из требований к оператору присваивания. а для любого метода this неявно передается как первый аргумент, это описывается в стандарте.
1
|
||
|
3 / 3 / 2
Регистрация: 07.02.2013
Сообщений: 185
|
|
| 25.06.2015, 00:03 [ТС] | |
|
OstapBender, а по коду моему это следует из первой строчки или как?
0
|
|
|
594 / 532 / 76
Регистрация: 22.03.2011
Сообщений: 1,585
|
|
| 25.06.2015, 00:10 | |
|
0
|
|
|
3 / 3 / 2
Регистрация: 07.02.2013
Сообщений: 185
|
|
| 25.06.2015, 00:12 [ТС] | |
|
OstapBender, с меня просто требовали указать это в коде, поэтому я уже сам запутался , что к чему.
По данному коду вы можете точно указать строку, где указывается это?
0
|
|
|
594 / 532 / 76
Регистрация: 22.03.2011
Сообщений: 1,585
|
||
| 25.06.2015, 00:21 | ||
|
Но если вам так угодно, то в коде видно, что вы используете this->... который нигде не объявляется а "неявно передается в любой метод", он то и есть тот самый первый аргумент.
0
|
||
|
8973 / 4319 / 960
Регистрация: 15.11.2014
Сообщений: 9,760
|
|||||||
| 25.06.2015, 00:45 | |||||||
|
other не является вторым аргументом оператора присвоения. он является единственным аргументом присвоения. пример: http://rextester.com/KDV21108
которое отличает его от прочих операторов или функций: его нельзя перегрузить глобально.
1
|
|||||||
|
3 / 3 / 2
Регистрация: 07.02.2013
Сообщений: 185
|
|
| 25.06.2015, 00:53 [ТС] | |
|
hoggy, хорошо other это единственный аргумент оператора присваивания. Исходя из первой строчки, т.к. он идет после записи operator=
0
|
|
|
8973 / 4319 / 960
Регистрация: 15.11.2014
Сообщений: 9,760
|
||
| 25.06.2015, 01:02 | ||
|
но сам оператор - бинарный. тобишь, в операции присвоения всегда участвует два операнда (не путать операнд и аргумент). в качестве левостоящего операнда выступает объект, чем оператор= был запущен. в качестве правостоящего операнда выступает ваш other.
1
|
||
|
2083 / 1574 / 169
Регистрация: 14.12.2014
Сообщений: 13,614
|
||
| 25.06.2015, 01:06 | ||
|
0
|
||
|
8973 / 4319 / 960
Регистрация: 15.11.2014
Сообщений: 9,760
|
||
| 25.06.2015, 01:21 | ||
|
1. Стандарт ничего не говорит по поводу передачи скрытого this. И оставляет это не откуп компиляторов. 2. Соглашения о вызовах не являются частью стандарта. Более того, невзирая на соглашение о вызове, компилятор вправе оптимизировать передачу скрытого аргумента this. Именно по-этой причине, компиляторы не дают просто так кастить указатель на функцию-член, к свободной функции. Потому что программист в общем случае не может закладываться на то, как именно будет передана информация об адресе объекта для которого запускается функция-член. И попытки обойти защиту компилятора - это хак на свой страх и риск. 3. Соглашения о вызовах случаются разными. И технически нет никаких препятствий для того, что бы передавать this, например, всегда последним аргументов, либо как то ещё. Поэтому, несмотря на то, что обычно он - первый, нельзя сказать, что он всегда и априори будет первым аргументом. 4. Так или иначе, но это - кухня компилятора, а не часть языка. Формально, с точки зрения правил языка, никакого скрытого аргумента не существует. Существует ровно то, что написал программист.
0
|
||
|
2083 / 1574 / 169
Регистрация: 14.12.2014
Сообщений: 13,614
|
||
| 25.06.2015, 01:55 | ||
|
Хотя бы потому что в скопе метода существует this. Добавлено через 3 минуты CircleList<DataType>& CircleList<DataType>::operator=(CircleList<DataType>& other) Ото что выделено жирным фактически и есть объявлением параметра this.
0
|
||
|
8973 / 4319 / 960
Регистрация: 15.11.2014
Сообщений: 9,760
|
|||
| 25.06.2015, 01:58 | |||
|
оптимизации. он может пройти через регистры, например. или какой нибудь шибко умный компилятор догадается, что в программе один единственный экземпляр (какой нибудь сингелтон), и вообще весь метод сделает inline, включая адрес объекта. Добавлено через 2 минуты для того, что бы объявить указатель this нужно написать ключевое слово this. никакого другого объявления для указателя this не существует.
0
|
|||
|
2083 / 1574 / 169
Регистрация: 14.12.2014
Сообщений: 13,614
|
||
| 25.06.2015, 02:02 | ||
|
0
|
||
|
8973 / 4319 / 960
Регистрация: 15.11.2014
Сообщений: 9,760
|
|
| 25.06.2015, 02:03 | |
|
0
|
|
|
2083 / 1574 / 169
Регистрация: 14.12.2014
Сообщений: 13,614
|
||
| 25.06.2015, 02:06 | ||
0
|
||
| 25.06.2015, 02:06 | |
|
Помогаю со студенческими работами здесь
18
Очередь, конструктор копирования и перегруженный оператор присваивания
Для шаблонного класса перегрузить оператор присваивания, copy-конструктор, объекты cin и cout, оператор * Перегруженный оператор +
Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
Установка Qt-версии Lazarus IDE в Debian Trixie Xfce
volvo 10.02.2026
В общем, достали меня глюки IDE Лазаруса, собранной с использованием набора виджетов Gtk2 (конкретно: если набирать текст в редакторе и вызвать подсказку через Ctrl+Space, то после закрытия окошка. . .
|
SDL3 для Web (WebAssembly): Работа со звуком через SDL3_mixer
8Observer8 08.02.2026
Содержание блога
Пошагово создадим проект для загрузки звукового файла и воспроизведения звука с помощью библиотеки SDL3_mixer. Звук будет воспроизводиться по клику мышки по холсту на Desktop и по. . .
|
SDL3 для Web (WebAssembly): Основы отладки веб-приложений на SDL3 по USB и Wi-Fi, запущенных в браузере мобильных устройств
8Observer8 07.02.2026
Содержание блога
Браузер Chrome имеет средства для отладки мобильных веб-приложений по USB. В этой пошаговой инструкции ограничимся работой с консолью. Вывод в консоль - это часть процесса. . .
|
SDL3 для Web (WebAssembly): Обработчик клика мыши в браузере ПК и касания экрана в браузере на мобильном устройстве
8Observer8 02.02.2026
Содержание блога
Для начала пошагово создадим рабочий пример для подготовки к экспериментам в браузере ПК и в браузере мобильного устройства. Потом напишем обработчик клика мыши и обработчик. . .
|
|
Философия технологии
iceja 01.02.2026
На мой взгляд у человека в технических проектах остается роль генерального директора. Все остальное нейронки делают уже лучше человека. Они не могут нести предпринимательские риски, не могут. . .
|
SDL3 для Web (WebAssembly): Вывод текста со шрифтом TTF с помощью SDL3_ttf
8Observer8 01.02.2026
Содержание блога
В этой пошаговой инструкции создадим с нуля веб-приложение, которое выводит текст в окне браузера. Запустим на Android на локальном сервере. Загрузим Release на бесплатный. . .
|
SDL3 для Web (WebAssembly): Сборка C/C++ проекта из консоли
8Observer8 30.01.2026
Содержание блога
Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а. . .
|
SDL3 для Web (WebAssembly): Установка Emscripten SDK (emsdk) и CMake для сборки C и C++ приложений в Wasm
8Observer8 30.01.2026
Содержание блога
Для того чтобы скачать Emscripten SDK (emsdk) необходимо сначало скачать и уставить Git: Install for Windows. Следуйте стандартной процедуре установки Git через установщик. . . .
|