7 / 7 / 7
Регистрация: 26.04.2015
Сообщений: 220
|
||||||||||||||||
1 | ||||||||||||||||
Конструктор копирования для класса стек04.08.2017, 11:33. Показов 3478. Ответов 24
Метки нет Все метки)
(
Почему не хочет работать конструктор копирования?
0
|
|
04.08.2017, 11:33 | |
Ответы с готовыми решениями:
24
Cделать конструктор по умолчанию и копирования для класса Конструктор копирования для класса с указателем на абстрактный класс Конструктор копирования для динамического объекта класса приемника Конструктор класса, конструктор копирования запускается не тот который нужен |
2098 / 1619 / 690
Регистрация: 27.07.2012
Сообщений: 4,853
|
||||||
04.08.2017, 12:01 | 2 | |||||
Потому что всё неправильно.
Только 1 пример:
0
|
7 / 7 / 7
Регистрация: 26.04.2015
Сообщений: 220
|
||||||
04.08.2017, 12:12 [ТС] | 3 | |||||
John Prick,
Это не объект это указатель на объект. Я закидываю его в стек и удаляю указатель на него, чтобы не переполнять память Добавлено через 8 минут о и надо же хвост сместить:
0
|
Mental handicap
1245 / 623 / 171
Регистрация: 24.11.2015
Сообщений: 2,429
|
||||||
04.08.2017, 12:22 | 4 | |||||
смысл такой(пример):
0
|
7 / 7 / 7
Регистрация: 26.04.2015
Сообщений: 220
|
|
04.08.2017, 12:37 [ТС] | 5 |
Azazel-San,
если я не ошибаюсь, то так получется стек 2 обратный стеку 1 (порядок элементов наоборот будет). или я что-то не понимаю? а надо идентичные два стека Я пытаюсь реализовать добавление в конец списка
0
|
2098 / 1619 / 690
Регистрация: 27.07.2012
Сообщений: 4,853
|
||||||
04.08.2017, 13:05 | 6 | |||||
Удаляете вы как раз объект.
0
|
Mental handicap
1245 / 623 / 171
Регистрация: 24.11.2015
Сообщений: 2,429
|
|
04.08.2017, 13:09 | 7 |
зачем, вы хотите скопировать стек1 в стек2, но у вас, так как вы сделали, это не получится
возможно, вам тогда проще из стека1 доставать его элементы, менять местами и перезаписывать в стек2
0
|
7 / 7 / 7
Регистрация: 26.04.2015
Сообщений: 220
|
|
04.08.2017, 13:33 [ТС] | 9 |
GbaLog-,
опана, действительно. А как удалить указатель? или он сам удалится после того как отработает процедура?
0
|
Любитель чаепитий
|
|
04.08.2017, 14:03 | 10 |
указатель - такой же тип переменной, как и, например,
int , и он удалится по выходу из области видимости.если это не динамически созданный указатель, конечно.
1
|
7 / 7 / 7
Регистрация: 26.04.2015
Сообщений: 220
|
||||||
04.08.2017, 14:06 [ТС] | 11 | |||||
чутка переделала:
сказали надо - делаю. это уже поняла. так а почему обычное добавление в конец списка не работает? Добавлено через 1 минуту GbaLog-, метод пуш - если я вконце дописываю удаление temp - все ложится, temp сделан динамически, как в таких случаях поступать следует?
0
|
Любитель чаепитий
|
|
04.08.2017, 14:07 | 12 |
динамически созданный указатель - это
Item ** ptr = new Item*; .при этом ptr удалится при выходе из области видимости, а то, на что он указывал - не удалится и будет утечка памяти, если никто не удалит/заберет во владение этот указатель.в вашем случае указатель создан автоматически, так что и беспокоиться вам за temp не надо.
1
|
Mental handicap
1245 / 623 / 171
Регистрация: 24.11.2015
Сообщений: 2,429
|
|
04.08.2017, 14:12 | 13 |
ставьте скобки даже если только 1 команда выполняется, вроде и мелочь, но повышает читабельность кода
у вас при извлечении данные будут в обратном порядке, вот вы в стек записали числа 1, 2, 3, 4, 5, а при извлечении из стека будет: 5, 4, 3, 2, 1 так уж работает стек, следовательно при записи в стек2, они буду в таком порядке, а вам надо 1, 2, 3, 4, 5 хотя конечно, при извлечении данные будут удалены из стека1, ну смотря что вам нужно сделать, задание вы так и не озвучили?
0
|
Любитель чаепитий
|
|
04.08.2017, 14:18 | 14 |
фигня это всё.
если будет на другой строке с отступом, то всё будет норм читаться. по теме: я бы сделал некое подобие std::vector и под капот запихал бы и оставил бы сам stack с implicit-declaration копирующим конструктором.куда легче, чем велосипеды придумывать.
0
|
7 / 7 / 7
Регистрация: 26.04.2015
Сообщений: 220
|
|||||||||||
04.08.2017, 14:35 [ТС] | 15 | ||||||||||
Azazel-San, надо конструктор копирования сделать, да такой чтобы если стек1= 5 4 3 2 1 при вызове стек2(стек1) делал стек2 полной копией стека1, та есть стек2 = 5 4 3 2 1.
методом пуш я всегда в стек пихаю в начало списка, поп я выталкиваю из начала списка. я себе представляю это следующим образом: конструктор копирования должен добавлять в конец списка, а не в начало и тогда у меня получится, что копирую я стек1 в стек2 в том же порядке, так как выталкивать буду с первого элемента все тем же поп. Добавлено через 15 минут Все, нашла ошибку:
0
|
7 / 7 / 7
Регистрация: 26.04.2015
Сообщений: 220
|
|
04.08.2017, 16:32 [ТС] | 17 |
GbaLog-, я наверно не совсем правильно выразилась, это же не компилятор скорее вредничает а блокнот) компилятор GNU g++, а блокнот Geany, он странный немного
0
|
Любитель чаепитий
|
||||||
04.08.2017, 17:33 | 18 | |||||
и в чём проблема с
nullptr в блокноте?простейшая реализация стека на мой взгляд
надеюсь, что я ничего не накосячил с памятью, так лень думать.
0
|
7 / 7 / 7
Регистрация: 26.04.2015
Сообщений: 220
|
|
04.08.2017, 17:50 [ТС] | 19 |
GbaLog-, не знаю он что-то пишет что это 11 года стандарт и не принимает.
Мне надо было просто отработать перегрузку конструктора копирования и оператора равно, что я и делала
0
|
Любитель чаепитий
|
|
04.08.2017, 19:01 | 20 |
ну а
NULL тут при чём?в комментарии написано "не NULL не nullptr ", NULL - это явно не с++11.
0
|
04.08.2017, 19:01 | |
Помогаю со студенческими работами здесь
20
Будет ли утрачена память, когда конструктор копирования вызывается для уже существующего объекта класса? Создать конструктор копирования для класса "Прямоугольник"
Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |