Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 5.00/7: Рейтинг темы: голосов - 7, средняя оценка - 5.00
266 / 81 / 18
Регистрация: 05.04.2018
Сообщений: 1,102
Записей в блоге: 1
1

Временное сохранение массива = *this

19.07.2018, 11:25. Показов 1272. Ответов 6
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Привет.
Не понимаю как можно в данном примере перегрузки += (добавление элемента в конец массива) временно сохранить массив в *this. Ведь this указывает на адрес созданного объекта, но на какой именно? я что-то запутался в этой строке
C++
1
result = *this;
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
Array Array::&operator +=(const int &number)
{
    Array result(size); //массив размером size
    result = *this;  //куда сохраняется массив??
    
    delete[]ptr;  //в private int *ptr;
    
    size += 1;
    ptr = new int[size];
    for(int i = 0; i < (size - 1); ++i){
        ptr[i] = result.ptr[i];
    }
    
    ptr[size - 1] = number;
    
    return *this;
}
Добавлено через 10 минут
и в обще почему return *this, если мы добавляем последний элемент в ptr?
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
19.07.2018, 11:25
Ответы с готовыми решениями:

Временное сохранение stringgrid
Есть форма 1. На ней выполняются операции. Есть форма 2, которая берёт данные из формы 1 и выводит...

Временное сохранение данных страницы
Всем привет! У меня пользователь заполняет карточку...вносит множество сведений... До занесения в...

Временное сохранение данных с второй формы
Уважаемые форумчане! У меня две формы Form1 Form2. На обоих текстбоксы. Запускаю первую...

Сохранение массива в файл и чтение массива из файла
Имеется массив: int region_coordinates; Надо его записать в файл(неважно, в каком формате,...

6
зомбяк
1584 / 1218 / 345
Регистрация: 14.05.2017
Сообщений: 3,940
19.07.2018, 11:29 2
Цитата Сообщение от Джон Кофи Посмотреть сообщение
Ведь this указывает на адрес созданного объекта, но на какой именно?
Адрес того объекта, который является первым операндом оператора +=. Т.е. в выражении
C++
1
a += b;
речь о объекте a и его адресе.

Ну и его копируют в локальную переменную.

Добавлено через 1 минуту
Цитата Сообщение от Джон Кофи Посмотреть сообщение
и в обще почему return *this, если мы добавляем последний элемент в ptr?
потому что в данном случае никакой разницы между ptr и this->ptr нет . Поскольку речь о функции класса.
1
266 / 81 / 18
Регистрация: 05.04.2018
Сообщений: 1,102
Записей в блоге: 1
19.07.2018, 11:37  [ТС] 3
сохранили result в *this;
удалили ptr;
увеличили размер массива;
выделили память под ptr с новым размером.
элементы с result.ptr копирнули в ptr;
присвоили последним элементом в ptr наше значение...
и вернули THIS
почему this? ведь ptr же вроде. И для чего в обще сохранять массив result в *this?
операции все проводим с ptr, его меняем, в него добавляем, а возвращаем другое.

Добавлено через 1 минуту
Цитата Сообщение от TRam_ Посмотреть сообщение
потому что в данном случае никакой разницы между ptr и this->ptr нет . Поскольку речь о функции класса.
ладно, наверное я не до конца с this разобрался. Полностью логику не понимаю что тут в обще происходит. Хотя до этого примера с этим проблем не имел.
0
365 / 321 / 219
Регистрация: 21.02.2013
Сообщений: 756
19.07.2018, 11:39 4
ну тут надо еще на оператор присвоения глянуть.
C++
1
result = *this;// this ето указатель на данный объект в котором и реализуется оператор следовательно *this вернет сам объект
там наверно создается копия ptr.
Потом стирается ptr данного объекта и заново выделяется память с размером на один больше. И уже из result объекта копируются данные.
0
1468 / 1009 / 456
Регистрация: 30.10.2017
Сообщений: 2,800
19.07.2018, 11:52 5
Лучший ответ Сообщение было отмечено Джон Кофи как решение

Решение

Цитата Сообщение от Джон Кофи Посмотреть сообщение
сохранили result в *this;

C++
1
result = *this;
Вы немного путаете. Не result в *this сохраняется, а наоборот. То есть создается копия объекта array с локальным временем жизни, сохраняющаяся в result. Она нужна для того, чтобы данные не потерялись после пересоздания массива ptr. Данные обратно копируются в строке 11.

C++
1
return *this;

Эта строка создает временный объект, являющийся копией результата, передающийся в выражение, где вызывали операцию равенства. Нужно это для того, чтобы вычислялись выражения вида.

C++
1
a = b = c; // ассоциативность справа налево
Причем нужно возвращать именно копию объекта, а не ссылку на временный объект, иначе объект удалится при окончании функции operator= и ссылка будет вести на удаленный объект.
1
266 / 81 / 18
Регистрация: 05.04.2018
Сообщений: 1,102
Записей в блоге: 1
19.07.2018, 12:44  [ТС] 6
QuakerRUS, Спасибо большое за подробность, кажется понимаю

Добавлено через 48 минут
QuakerRUS, result = *this || равносильно reuslt = this->(объект класса) ?
Если мы не поставим указатель на this, то тогда копия объекта не создастся? (result = this)
0
1468 / 1009 / 456
Регистрация: 30.10.2017
Сообщений: 2,800
19.07.2018, 13:17 7
Цитата Сообщение от Джон Кофи Посмотреть сообщение
result = *this || равносильно reuslt = this->(объект класса) ?
this->(объект класса) указывает на какой то элемент объекта Array, а мы должны указать на сам объект Array, то есть this. Операция * разыменовывает объект.


Цитата Сообщение от Джон Кофи Посмотреть сообщение
Если мы не поставим указатель на this, то тогда копия объекта не создастся? (result = this)
Не создается, так как в этом случае мы вернем адрес временного объекта, а не его копию.

Добавлено через 27 минут
Цитата Сообщение от Джон Кофи Посмотреть сообщение
(result = this)
И полагаю все же речь выше была о return *this, а не о result = this
1
19.07.2018, 13:17
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
19.07.2018, 13:17
Помогаю со студенческими работами здесь

временное добавление
Очень сложная задача. Мне нужно сделать базу в которую будут добавляться ячейки, но эти ячейки...

Временное подвисание
у мя семерка подвисает где то на минутку в рандомном порядке подвисоны проявляются будто бы комп...

Временное хранения ip
как хранить ip пользователя оставившего коммент на сайт? видел в бд запихивают. только вот не пойму...

Программно-временное устройство
Помогите найти информацию или укажите ресурс про программно-временное устройство. Особенно...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
7
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru