25 / 25 / 7
Регистрация: 02.12.2010
Сообщений: 824
|
|||||||||||
1 | |||||||||||
Переопределение операции: постфиксный унарный +08.04.2012, 22:31. Показов 3055. Ответов 16
Метки нет (Все метки)
Привет. Делаю переопределение операции для стека, нужно сделать постфиксный +, как добавление нового элемента.
то есть
Интересно, что если таким же способом переопределить инкремент "++", то будет доступен и префиксный и постфиксный способ, а просто с "+" - нет.
0
|
08.04.2012, 22:31 | |
Ответы с готовыми решениями:
16
Переопределение операции [] Переопределение операции инкремента Переопределение операции ввода Переопределение операции присваивания |
601 / 569 / 104
Регистрация: 07.11.2010
Сообщений: 2,004
|
|
08.04.2012, 22:41 | 2 |
а разве постфиксный унарный оператор + есть? - и + префиксные унарные есть точно
0
|
25 / 25 / 7
Регистрация: 02.12.2010
Сообщений: 824
|
|
08.04.2012, 23:07 [ТС] | 4 |
Задание такое.
Переопределение +. Я так понимаю надо и постфикс и префикс переопределить.
0
|
601 / 569 / 104
Регистрация: 07.11.2010
Сообщений: 2,004
|
|
08.04.2012, 23:14 | 6 |
VladSharikov перегрузка операторов введена для того чтобы вы работали с конкретными типами(классами) как со встроенными. Другие вас не поймут, не делайте так
0
|
25 / 25 / 7
Регистрация: 02.12.2010
Сообщений: 824
|
|
08.04.2012, 23:22 [ТС] | 7 |
soon,
ок, спасибо, не подумал, что постфикса нет ой, да я считаю, что это вообще идиотизм. могу для "угара" скинуть задание Код
Создать объект типа стек. Перегрузить оператор + как функцию член и * как дружественную функцию. + складывает элемент в новый стек, * умножает верхушку стека на параметр. Стеки можно присваивать, проверять на равенство == или !=, вводить и выводить в поток, добавлять += элемент в стек.
0
|
25 / 25 / 7
Регистрация: 02.12.2010
Сообщений: 824
|
|
09.04.2012, 00:30 [ТС] | 9 |
Как положить что-то куда-то не выделив под это что-то память?
0
|
Заблокирован
|
|
09.04.2012, 01:15 | 10 |
Ты осознаешь разницу между "выделить память под объект", и "создать объект" ?
Если нет, то я приведу тебе простейший пример: предположим, есть класс, экземпляры которого могут быть созданы с дефолтными настройками, или при помощи целой пачки явных конструкторов. Как твой стек узнает, какой именно конструктор нужен, и с какими именно параметрами его нужно дернуть, что бы создать конкретный объект? Задача всякого рода контейнеров - хранить объекты. Но они не делают предположений о том, как именно изначально были созданы эти объекты попавшие в контейнер снаружи. А теперь подумай, как именно тебе следует организовать operator+ согласно твоему заданию.
0
|
25 / 25 / 7
Регистрация: 02.12.2010
Сообщений: 824
|
|
09.04.2012, 01:29 [ТС] | 11 |
Складывать, положить, поместить...
значит поместить в какой-то контейнер, в данном случае контейнер - стек, что-то. Что-то, в данном случае, элемент. Как поместить элемент в стек , не выделив под этот элемент память?
0
|
Заблокирован
|
|||||||||||
09.04.2012, 01:47 | 12 | ||||||||||
Ты не улавливаешь момент: "выделить память под объект", и "создать объект" - это разные вещи.
Изюминка задания заключается не в том, как выделить память. А в том, как создать объект. Контейнер не знает о том, как именно должен быть создан хранимый объект. Но ему ничего не мешает клонировать уже существующий объект, и сохранить внутри себя эту копию. Получается, что объекты создаются снаружи, потом передаются контейнеру. Контейнер делает копии, и складывает эти копии внутри себя. Внешне это может выглядеть так:
Должно получиться что-то вроде:
0
|
25 / 25 / 7
Регистрация: 02.12.2010
Сообщений: 824
|
||||||
09.04.2012, 02:20 [ТС] | 13 | |||||
Хорошо, допустим так. Но ведь в любом случае добавляя что-то к контейнеру stack мы должны выделить под это память?
За идею спасибо, сейчас переделаю
0
|
Заблокирован
|
|
09.04.2012, 02:24 | 14 |
Да. Но контейнер может по собственному усмотрению решать, как именно эту память выделять.
Например, можно в ручную выделять память при помощи new, или же воспользоваться массивом (если заранее известно максимальное количество элементов). Ну или воспользоваться услугами std::vector, и тп.
0
|
25 / 25 / 7
Регистрация: 02.12.2010
Сообщений: 824
|
|||||||||||
09.04.2012, 02:25 [ТС] | 15 | ||||||||||
Вот кстати. Если тут столкнулся с проблемой "понимания", может быть и тут подскажете?
0
|
Заблокирован
|
|||||||||||
09.04.2012, 02:47 | 16 | ||||||||||
Сообщение было отмечено как решение
Решение
По хорошему, тут требуются итераторы.
Но что бы проиллюстрировать идею, лучше сделать попроще: Что бы вывести на консоль все элементы стека, можно просто тупо перебрать все элементы, один за другим:
Тогда, std::cout должен уметь вывести на консоль тип данных SNode Это значит, что ты должен подружить std::cout не только со своим стеком, но и с типом данных самих элементов. Что можно было сделать так:
0
|
25 / 25 / 7
Регистрация: 02.12.2010
Сообщений: 824
|
|
09.04.2012, 18:10 [ТС] | 17 |
Спасибо
0
|
09.04.2012, 18:10 | |
09.04.2012, 18:10 | |
Помогаю со студенческими работами здесь
17
Переопределение операции присваивания Переопределение операции вычитания строк Переопределение операции (-) вычитания для строк переопределение операции сложения вычетания сравнения Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |