29 / 29 / 7
Регистрация: 26.03.2010
Сообщений: 305
|
||||||
1 | ||||||
Перегрузка операций '<<' и '>>'17.10.2010, 16:52. Показов 3491. Ответов 32
Метки нет (Все метки)
Добрый вечер всем
У меня вот такое задание: Создайте класс, реализующий однонаправленную очередь. В интерфейс класса должны входить перегруженные операции: 1) добавить элемент в конец очереди (<<); 2) извлечь элемент из начала очереди (>>). Вот что смог написать (что не мог я закоментил):
0
|
17.10.2010, 16:52 | |
Ответы с готовыми решениями:
32
Перегрузка операций Перегрузка операций Перегрузка операций Перегрузка операций |
5828 / 3479 / 358
Регистрация: 08.02.2010
Сообщений: 7,448
|
||||||
17.10.2010, 17:20 | 2 | |||||
Я думаю, смысл создавать подобный интерфейс для работы с очередью в том, чтобы можно было "сцеплять" операторы постановки и изъятия из очереди (навроде работы с потоками ввода-вывода С++). А для этого необходимо, чтобы операторы возвращали ссылку на объект-очередь, а в параметрах принимали ссылку на элемент. Вроде бы в библиотеке контейнеров Qt я уже видел что-то подобное.
Сделал так:
0
|
29 / 29 / 7
Регистрация: 26.03.2010
Сообщений: 305
|
|
17.10.2010, 17:28 [ТС] | 3 |
На счет диструктора, да. Я просто пока тестировал. Мне как то не оч понятен ваш код. Можете как то помочь мой просто исправить)))
0
|
5828 / 3479 / 358
Регистрация: 08.02.2010
Сообщений: 7,448
|
|
17.10.2010, 17:34 | 4 |
Зачем ты оператору >> передаешь адрес первого узла очереди? Он у тебя и так уже известен, хранится в переменной-члене pbeg (или this->pbeg, если указывать явно)
0
|
29 / 29 / 7
Регистрация: 26.03.2010
Сообщений: 305
|
|
17.10.2010, 17:44 [ТС] | 5 |
0
|
5828 / 3479 / 358
Регистрация: 08.02.2010
Сообщений: 7,448
|
|||||||||||||||||||||
17.10.2010, 17:49 | 6 | ||||||||||||||||||||
Смотря какого поведения ты ожидаешь от оператора.
Если такого (overed - это заранее объявленный объект твоего класса):
1
|
29 / 29 / 7
Регистрация: 26.03.2010
Сообщений: 305
|
|
17.10.2010, 17:55 [ТС] | 7 |
Что то вообще не понимаю(((
0
|
5828 / 3479 / 358
Регистрация: 08.02.2010
Сообщений: 7,448
|
|
17.10.2010, 18:00 | 8 |
0
|
29 / 29 / 7
Регистрация: 26.03.2010
Сообщений: 305
|
|
17.10.2010, 18:05 [ТС] | 9 |
0
|
5828 / 3479 / 358
Регистрация: 08.02.2010
Сообщений: 7,448
|
|
17.10.2010, 18:07 | 10 |
0
|
29 / 29 / 7
Регистрация: 26.03.2010
Сообщений: 305
|
|
17.10.2010, 18:14 [ТС] | 11 |
Разве нельзя мой подредактировать. Я просто не могу понять что там изменить нужно
0
|
29 / 29 / 7
Регистрация: 26.03.2010
Сообщений: 305
|
|
17.10.2010, 18:22 [ТС] | 13 |
да не я пытался так написать но выдает ошибки((
0
|
5828 / 3479 / 358
Регистрация: 08.02.2010
Сообщений: 7,448
|
|
17.10.2010, 18:27 | 14 |
0
|
29 / 29 / 7
Регистрация: 26.03.2010
Сообщений: 305
|
||||||
17.10.2010, 18:35 [ТС] | 15 | |||||
Да все практически осталось то же самое. Только дописал диструктор
0
|
5828 / 3479 / 358
Регистрация: 08.02.2010
Сообщений: 7,448
|
|||||||||||||||||||||
17.10.2010, 18:44 | 16 | ||||||||||||||||||||
Замени в возвращаемом значении операторов int на List&, и в конце каждого из них пропиши
Забыл скобки:
0
|
29 / 29 / 7
Регистрация: 26.03.2010
Сообщений: 305
|
|
17.10.2010, 18:44 [ТС] | 17 |
error C2628: недопустимый "List" с последующим "int" (возможно, отсутствует ";")
error C2556: List List::operator <<(int): перегруженная функция отличается от "int List::operator <<(int)" только возвращаемым типом error C2371: List::operator <<: переопределение; различные базовые типы error C2678: бинарный "!=": не найден оператор, принимающий левый операнд типа "List::Element" (или приемлемое преобразование отсутствует) 1> c:\program files (x86)\microsoft visual studio 10.0\vc\include\system_error(432): или "bool std::operator !=(const std::error_condition &,const std::error_code &)" 1> при попытке сопоставить список аргументов "(List::Element, int)" error C2819: тип "List::Element" не имеет перегруженный "operator ->" error C2232: ->List::Element::next: левый операнд имеет тип "struct", используйте "." error C2679: бинарный "=": не найден оператор, принимающий правый операнд типа "List::Element *" (или приемлемое преобразование отсутствует) error C2679: бинарный "=": не найден оператор, принимающий правый операнд типа "List::Element *" (или приемлемое преобразование отсутствует) error C2679: бинарный "=": не найден оператор, принимающий правый операнд типа "List::Element *" (или приемлемое преобразование отсутствует) error C2440: return: невозможно преобразовать "int" в "List &" error C2264: List::operator <<: ошибка в определении или объявлении функции; функция не вызвана error C2088: <<: недопустимо для class error C3867: List:rint: в вызове функции отсутствует список аргументов; используйте "&List:rint" для создания указателя на член
0
|
5828 / 3479 / 358
Регистрация: 08.02.2010
Сообщений: 7,448
|
|
17.10.2010, 18:50 | 18 |
robert19, а теперь покажи, как ты объявил и описал операторы
0
|
29 / 29 / 7
Регистрация: 26.03.2010
Сообщений: 305
|
||||||
17.10.2010, 18:57 [ТС] | 19 | |||||
error C2556: List List::operator <<(int): перегруженная функция отличается от "int List::operator <<(int)" только возвращаемым типом error C2371: List::operator <<: переопределение; различные базовые типы error C2264: List::operator <<: ошибка в определении или объявлении функции; функция не вызвана error C2088: <<: недопустимо для class
0
|
5828 / 3479 / 358
Регистрация: 08.02.2010
Сообщений: 7,448
|
|||||||||||||||||||||
17.10.2010, 19:23 | 20 | ||||||||||||||||||||
Разберем ошибки:
Нужно читать внимательней:
А ты что сделал? Ты заменил тип аргумента оператора, и сделал a локальной. Зачем? Надо так:
0
|
17.10.2010, 19:23 | |
17.10.2010, 19:23 | |
Помогаю со студенческими работами здесь
20
Перегрузка операций Перегрузка операций Перегрузка операций Перегрузка операций << и >> Перегрузка операций С++ Перегрузка Операций C++ Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |