|
|
Регистрация Восстановить пароль |
Повторная активизация e-mail |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
|
Опции темы | Поиск в этой теме |
24.04.2011, 19:02 | #1 |
Регистрация: 24.09.2009
Сообщений: 9
|
С++ линейный односвязный список
Здравствуйте. Моя задача состоит в том, что бы создать класс "длинное целое число", которое сохраняется в линейном односвязном списке.
У меня есть вопрос по написанному мной коду. В этой части кода я перегружаю оператор + для моего класса MyList. И проблемы как таковой нет в счислениях - все работает, оно прибавляет два числа правильно. НО! Дело в том, что если написать C=А+B; где, например, А=25 и B=25, то не только с примет значение 50, а и А тоже. Вот код перегрузки оператора: Код:
Count() - кол-во цифр в списке. Head - указатель на начало списка. Ведь const прописан в двух местах. В чем тогда дело? Почему меняется не только С а и А? Объясните студентке пожалуйста ~
Тра-та-та о_О
^^" |
24.04.2011, 19:59 | #2 |
Форумчанин
Регистрация: 11.08.2009
Сообщений: 433
|
Весьма сложно читать код без определения класса. Сжальтесь, выложите описание своего класса.
|
25.04.2011, 12:10 | #3 |
Регистрация: 24.09.2009
Сообщений: 9
|
Код:
Тра-та-та о_О
^^" |
25.04.2011, 20:24 | #4 |
Форумчанин
Регистрация: 11.08.2009
Сообщений: 433
|
Так все правильно. Формально ваша функция не меняет А. Посмотрите внимательно, все поля какими были, такими и остались. Но она удивительным образом изменяет какой-то там энный элемент в списке, который членом класса не является, вы всего лишь ссылаетесь на тот элемент через указатель. Поэтому у вас складывается впечатление, что функция отрабатывает неправильно. Сама логика неправильна. А с точки зрения языка все нормально.
Вообще, объявляя операцию const вы подразумеваете, что экземпляр класса изменяться не будет (он и не изменяется). Но почему тогда в качестве результата передаете *this? То есть и результат будет равняться первому операнду в операции сложения по вашей логике? Это ведь абсурд. Поэтому не поленитесть создать еще один экземпляр своего класса внутри операции сложения, запихните в него данные из первого операнда (я вижу, что у вас операция = перегружена, надеюсь, вы там не просто указатели переприсваиваете, а создаете новый экземляр через new), а потом доцепите данные из второго операнда таким же образом. |
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Линейный-односвязный список | Айдар | Помощь студентам | 1 | 01.06.2010 10:20 |
линейный односвязный список на С - что это?? о_О | aka_Kiss | Помощь студентам | 8 | 22.12.2009 01:39 |
C++. Односвязный список. Уничтожить список | Olya90 | Помощь студентам | 2 | 10.06.2009 18:52 |
Линейный односвязный список | Absinth | Помощь студентам | 4 | 11.11.2008 20:29 |
Помогите пож-та.Паскаль. Линейный односвязный список (ЛОС) | tonich | Паскаль, Turbo Pascal, PascalABC.NET | 1 | 25.02.2008 21:55 |