19 / 19 / 2
Регистрация: 29.11.2009
Сообщений: 224
|
||||||
1 | ||||||
Как передалеть operator= класса?20.01.2010, 14:16. Показов 6750. Ответов 78
Метки нет (Все метки)
Вот готовая программа, но там одна проблема - после использования оператора=, при изменении значений в одном объекте класса, они изменяются и в другом. Другими словами, как сделать так, чтобы вывод программы был:
Frisky's age: 5 whisker's age: 6 а не Frisky's age: 5 whisker's age: 0 Вот код программы:
1
|
20.01.2010, 14:16 | |
Ответы с готовыми решениями:
78
operator+ как член класса Как перенести operator из базового класса в производный? Класс: Почему этот operator+ не хочет работать как функция внутри класса? operator[][] для класса |
3687 / 964 / 114
Регистрация: 10.01.2010
Сообщений: 2,550
|
||||||
20.01.2010, 14:34 | 2 | |||||
0
|
depict1
281 / 146 / 4
Регистрация: 11.07.2009
Сообщений: 606
|
|
20.01.2010, 14:35 | 3 |
insideone, гениально, Ватсон!
*** всмысле - взять и закомментить кусок кода
0
|
3687 / 964 / 114
Регистрация: 10.01.2010
Сообщений: 2,550
|
|
20.01.2010, 14:44 | 4 |
Я надеюсь это не намек на отладчик Windows )) Я правда этого не знал! =) Ведь я всего лишь самоучка который не читал ни одной книги по C++ ) В ближайшее время прикуплю парочку и буду уже высказываться как специалист когда освою :-D Все равно на примерах интереснее изучать )
Добавлено через 1 минуту Вообще то я сначало его закоментил чтобы проверить что будет делать компилятор без него)) Просто там точка останова не выполнялась. А потом дописал конструктор копирования) Разкоментить обратно забылось
0
|
depict1
281 / 146 / 4
Регистрация: 11.07.2009
Сообщений: 606
|
|
20.01.2010, 14:45 | 5 |
проблема в том, что при копировании по-умолчанию используется почленное копирование данных.
если же в классе имеются указатели - то соответственно при копировании они будут указывать на один и тот-же адрес в памяти.
0
|
3687 / 964 / 114
Регистрация: 10.01.2010
Сообщений: 2,550
|
|
20.01.2010, 14:47 | 6 |
Т.е. если класс содержит указатели надо в любом случае для него писать констукторы?) А если нет то переменные будут как статик прям? (для разных объектов одни и те же)
0
|
depict1
281 / 146 / 4
Регистрация: 11.07.2009
Сообщений: 606
|
|
20.01.2010, 14:49 | 7 |
не конструкторы.
а конструктор копирования, деструктор, оператор присвоения статик - это ОДНА И ТАЖЕ переменная для всех экземпляторов класса а в нашем случае переменные будут разные, просто значение, которое в них хранится -совпадает
0
|
1261 / 799 / 108
Регистрация: 16.09.2009
Сообщений: 2,010
|
|
20.01.2010, 15:00 | 8 |
zim22:
Однозначно. Если не написать будет страшная ошибка: Если не определить конструктор копирования: Указатели двух объектов(участвующих в копировании) будут хранить адрес одного участка памяти это нехорошо. Короче говоря в конструкторе копирование надо сделать new и выделить в указатель адрес другого участка памяти: Добавлено через 2 минуты Надеюсь код приводить не надо. Добавлено через 15 секунд Надеюсь код приводить не надо.
0
|
ISergey
|
20.01.2010, 15:02
#9
|
0
|
1261 / 799 / 108
Регистрация: 16.09.2009
Сообщений: 2,010
|
||||||
20.01.2010, 15:02 | 10 | |||||
0
|
3687 / 964 / 114
Регистрация: 10.01.2010
Сообщений: 2,550
|
|
20.01.2010, 15:03 | 11 |
0
|
1261 / 799 / 108
Регистрация: 16.09.2009
Сообщений: 2,010
|
|
20.01.2010, 15:05 | 12 |
ISergey:
Но если хочешь что во время использования объекта, он внезапно испортился с помощью деструктора другого объекта тогда всё нормуль.
0
|
depict1
281 / 146 / 4
Регистрация: 11.07.2009
Сообщений: 606
|
|
20.01.2010, 15:08 | 13 |
0
|
ISergey
|
20.01.2010, 15:11
#14
|
Не по теме: :rofl:
0
|
depict1
281 / 146 / 4
Регистрация: 11.07.2009
Сообщений: 606
|
|
20.01.2010, 15:12 | 15 |
0
|
1261 / 799 / 108
Регистрация: 16.09.2009
Сообщений: 2,010
|
|
20.01.2010, 15:20 | 16 |
Я то понимаю
Добавлено через 1 минуту CAT whiskers = Frisky; вызов конструктора копирования по умолчанию, и как результат, несколько указателей ссылаются на одну область памяти. Добавлено через 51 секунду Это не операция присваивание, если кому интересно. Добавлено через 4 минуты Мне удивительно, почему это прога, работает, нормально. У меня после выполнения main, программа завершается аварийно.
0
|
depict1
281 / 146 / 4
Регистрация: 11.07.2009
Сообщений: 606
|
|
20.01.2010, 15:20 | 17 |
0
|
insideone
|
20.01.2010, 15:21
#18
|
Не по теме: Это явный пример неоднозначности воспринимаемости C++ и наличие в нем различного рода граблей! =) Вроде думаешь так оно должно делаться ан нет, открой книжечку на страничке 1024 и прочитай что не так а эдак)
0
|
1261 / 799 / 108
Регистрация: 16.09.2009
Сообщений: 2,010
|
|
20.01.2010, 15:25 | 19 |
zim22:
Если конструктор копирования не определён, как же его называть.
0
|
19 / 19 / 2
Регистрация: 29.11.2009
Сообщений: 224
|
|
20.01.2010, 15:41 [ТС] | 20 |
>> insideone
Молодец, выбрал легкий путь. Я твою программу не проверял, но если она заработает как надо - то это просто везение, т. к. конструктор по умолчанию поверхностно (тупо) копирует объекты класса. В данном случае - адреса указателей. Если какой-либо объект выйдет за зону видимости программы, результат использования второго объекта будет непредсказуем. А кто-то может написать код исправленной программы?
0
|
20.01.2010, 15:41 | |
20.01.2010, 15:41 | |
Помогаю со студенческими работами здесь
20
Operator< для класса Перегрузка operator* у класса Complex Не работает operator<< шаблонного класса Vector Перегрузка operator>> для производного класса Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |