|
0 / 0 / 0
Регистрация: 26.09.2011
Сообщений: 40
|
||||||
Оператор присваивания.10.01.2012, 21:55. Показов 6799. Ответов 8
Метки нет (Все метки)
Всем привет!В универе щас работаем с классами и перегрузками.В частности перегрузкой оператора присваивания и индексации.И я в упор не понимаю зачем это нужно.Например:
1)Оператор присваивания:
2)Тоже самое про индексацию.Помогите пожалуйста всю голову сломал.Большое спасибо!
0
|
||||||
| 10.01.2012, 21:55 | |
|
Ответы с готовыми решениями:
8
Для шаблонного класса перегрузить оператор присваивания, copy-конструктор, объекты cin и cout, оператор * оператор присваивания Оператор присваивания |
|
Псевдослучайный
1946 / 1146 / 98
Регистрация: 13.09.2011
Сообщений: 3,215
|
|
| 10.01.2012, 22:21 | |
|
Класс использует динамическую память для хранения строки символов, непосредственно в нём хранится только адрес и технические переменные. Если использовать конструктор копирования по умолчанию, получится, что адрес у обоих указывает на одну и ту же область памяти. Дальше, я думаю, понятно.
Обращение по индексу нужно, чтобы получить символ, находящийся в строке на определенном месте.
1
|
|
|
0 / 0 / 0
Регистрация: 26.09.2011
Сообщений: 40
|
|
| 10.01.2012, 22:31 [ТС] | |
|
Тоесть в данном случае,в переменной (а) лежит адрес на первый элемент строки?И если использовать конструктор копирования,то у нас будет 2 переменных,в которых находится адрес,ссылающийся
на одинаковую область памяти?И если мы удалим переменную (а),то переменная (с) будет ссылаться на несуществующую область памяти?И тогда что происходит при перегрузке оператора?И зачем нужна ссылка? Спасибо,это очень важно!!!
0
|
|
|
Псевдослучайный
1946 / 1146 / 98
Регистрация: 13.09.2011
Сообщений: 3,215
|
|
| 10.01.2012, 22:37 | |
|
Не совсем, там структура данных объекта, в которой адрес том числе. В конструкторе копирования выделяется новый кусок памяти и туда копируется символьная строка из того объекта, который присваиваться. У каждого объекта получается по своей независимой копии.
Добавлено через 1 минуту По ссылке строка передается, чтобы не нужно было лишний раз копировать всё содержание структуры данных объекта.
1
|
|
|
0 / 0 / 0
Регистрация: 26.09.2011
Сообщений: 40
|
|
| 10.01.2012, 23:23 [ТС] | |
|
NoMasters, прости дружище,я не совсем понял что ты написал.Может быть на примере?
Добавлено через 35 минут Может быть так правильно.Если делать стандартно, то массив будет один, а указателей на его начало два. Удаляя первый объект, мы удаляем указатель на начало массива и сам массив, после этого при попытке удалить второй объект мы получим ошибку, потому что там указатель ссылается на ничто. после перегрузки создается еще один массив, указатель в одном объекте ссылается на первый массив, во втором - на второй, и все ок работает
0
|
|
|
Псевдослучайный
1946 / 1146 / 98
Регистрация: 13.09.2011
Сообщений: 3,215
|
|||||||||||
| 10.01.2012, 23:27 | |||||||||||
|
Можно открыть наконец книжку и прочитать о том, что такое объекты и как это работает. Предположим у нас есть какой-то такой класс строки:
1
|
|||||||||||
|
1500 / 1146 / 165
Регистрация: 05.12.2011
Сообщений: 2,279
|
||||||
| 10.01.2012, 23:32 | ||||||
|
Поправте сигнатуру у оператора =. Строка в него должна передаваться по константной ссылке. Вы ведь не изменяете передаваемую строку в этом операторе? Иначе будут ошибки компиляции в некоторых случаях. например:
2
|
||||||
|
Псевдослучайный
1946 / 1146 / 98
Регистрация: 13.09.2011
Сообщений: 3,215
|
|
| 10.01.2012, 23:34 | |
|
Точно, спасибо
0
|
|
|
31 / 31 / 16
Регистрация: 30.11.2010
Сообщений: 81
|
||||||||||||||||||||||||
| 10.01.2012, 23:43 | ||||||||||||||||||||||||
|
Начнем по порядку. Для начала разберем код, который вы привели в примере
В случаях, когда вы пишете
Далее рассматриваем начальную часть кода: Правильная запись будет выглядеть так:
Теперь подробно про перегрузку оператора индексации. Допустим у нас есть определение функции следующего вида:
1
|
||||||||||||||||||||||||
| 10.01.2012, 23:43 | |
|
Помогаю со студенческими работами здесь
9
Оператор присваивания оператор присваивания Оператор присваивания
Оператор присваивания в c++ Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
SDL3 для Web (WebAssembly): Синхронизация спрайтов SDL3 и тел Box2D
8Observer8 04.03.2026
Содержание блога
Финальная демка в браузере. Итоговый код: finish-sync-physics-sprites-sdl3-c. zip
На первой гифке отладочные линии отключены, а на второй включены:. . .
|
SDL3 для Web (WebAssembly): Идентификация объектов на Box2D v3 - использование userData и событий коллизий
8Observer8 02.03.2026
Содержание блога
Финальная демка в браузере. Итоговый код: finish-collision-events-sdl3-c. zip
https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11680&d=1772460536
Одним из. . .
|
Реалии
Hrethgir 01.03.2026
Нет, я не закончил до сих пор симулятор. Эта задача сложнее. Не получилось уйти в плавсостав, но оно и к лучшему, возможно. Точнее получалось - но сварщиком в палубную команду, а это значит, в моём. . .
|
Ритм жизни
kumehtar 27.02.2026
Иногда приходится жить в ритме, где дел становится всё больше, а вовлечения в происходящее — всё меньше. Плотный график не даёт вниманию закрепиться ни на одном событии. Утро начинается с быстрых,. . .
|
|
SDL3 для Web (WebAssembly): Сборка библиотек: SDL3, Box2D, FreeType, SDL3_ttf, SDL3_mixer и SDL3_image из исходников с помощью CMake и Emscripten
8Observer8 27.02.2026
Недавно вышла версия 3. 4. 2 библиотеки SDL3. На странице официальной релиза доступны исходники, готовые DLL (для x86, x64, arm64), а также библиотеки для разработки под Android, MinGW и Visual Studio. . . .
|
SDL3 для Web (WebAssembly): Реализация движения на Box2D v3 - трение и коллизии с повёрнутыми стенами
8Observer8 20.02.2026
Содержание блога
Box2D позволяет легко создать главного героя, который не проходит сквозь стены и перемещается с заданным трением о препятствия, которые можно располагать под углом, как верхнее. . .
|
Конвертировать закладки radiotray-ng в m3u-плейлист
damix 19.02.2026
Это можно сделать скриптом для PowerShell. Использование
. \СonvertRadiotrayToM3U. ps1 <path_to_bookmarks. json>
Рядом с файлом bookmarks. json появится файл bookmarks. m3u с результатом.
# Check if. . .
|
Семь CDC на одном интерфейсе: 5 U[S]ARTов, 1 CAN и 1 SSI
Eddy_Em 18.02.2026
Постепенно допиливаю свою "многоинтерфейсную плату". Выглядит вот так:
https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11617&stc=1&d=1771445347
Основана на STM32F303RBT6.
На борту пять. . .
|