![]() |
Модераторы: Daevaorn |
![]() ![]() ![]() |
|
skyboy |
|
||||||||||||
неОпытный ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 9820 Регистрация: 18.5.2006 Где: Днепропетровск Репутация: 1 Всего: 260 |
есть класс. имя, правда, у него немного "неадекватное"
![]()
создаю объект класса:
строка
вызывает сообщение об ошибке:
Ну, ладно- думаю я,- получи. И делаю ход конем:
на оператор + не ругается(!), зато сообщает
Будьте добры, поясните, что я не понимаю в логике перегрузки, что допускаю такие ошибки? ------ VC++ 6.0 |
||||||||||||
|
|||||||||||||
archimed7592 |
|
|||
![]() Архимед ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2531 Регистрация: 12.6.2004 Где: Moscow Репутация: 58 Всего: 93 |
operator+ возвращает НЕуказатель, а ты пытаешься засунуть это в указатель...
нужно делать *zero + *zero -------------------- If you have an apple and I have an apple and we exchange apples then you and I will still each have one apple. But if you have an idea and I have an idea and we exchange these ideas, then each of us will have two ideas. © George Bernard Shaw |
|||
|
||||
powerfox |
|
|||
![]() I wanna fork() ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 3990 Регистрация: 1.10.2005 Где: Санкт-Петербург Репутация: 2 Всего: 97 |
Гм... А зачем складывать указатели в таком контексте? У тебя и сложение элементов и указателей одинаковы... zero у тебя указатель, а не твой объект. Вот и ругается. Добавлено через 6 минут и 26 секунд
Какой-то бред сморозил. |
|||
|
||||
skyboy |
|
||||
неОпытный ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 9820 Регистрация: 18.5.2006 Где: Днепропетровск Репутация: 1 Всего: 260 |
а как же перегрузка оператора присвоения: ? идет лесом? так делать нельзя?
не совсем понял мысль. я перегрузил оператор +. по моей внутренней логике, после перегрузки object1+object2 должно складывать не указатели, а вызывать всё тот же object1->operator+(object2). Только неявно. Но, почему-то, не вызывает. Значит моё виденье работы перегрузки операторов неверно. |
||||
|
|||||
archimed7592 |
|
|||
![]() Архимед ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2531 Регистрация: 12.6.2004 Где: Moscow Репутация: 58 Всего: 93 |
и не должен - это вполне себе нормальное имя ф-ции ;)
зы. в идеале, толку от *zero + *zero нету - они складываются, но результат игнорируется... пиши *a = *b + *c или *a+=*b -------------------- If you have an apple and I have an apple and we exchange apples then you and I will still each have one apple. But if you have an idea and I have an idea and we exchange these ideas, then each of us will have two ideas. © George Bernard Shaw |
|||
|
||||
skyboy |
|
|||
неОпытный ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 9820 Регистрация: 18.5.2006 Где: Днепропетровск Репутация: 1 Всего: 260 |
сам сказал, сам откоммнетился ![]() Добавлено через 2 минуты и 32 секунды это я отделил ошибку касательно перегрузки оператора присвоения от ошибки перегрузки оператора сложения ![]() ![]() да и пример, если не заметно ![]() |
|||
|
||||
archimed7592 |
|
||||
![]() Архимед ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2531 Регистрация: 12.6.2004 Где: Moscow Репутация: 58 Всего: 93 |
ну и что тебе эта перегрузка(делающая двойную работу, кстати) даёт? возможно писать
Добавлено через 58 секунд тройную! ![]() -------------------- If you have an apple and I have an apple and we exchange apples then you and I will still each have one apple. But if you have an idea and I have an idea and we exchange these ideas, then each of us will have two ideas. © George Bernard Shaw |
||||
|
|||||
skyboy |
|
|||
неОпытный ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 9820 Регистрация: 18.5.2006 Где: Днепропетровск Репутация: 1 Всего: 260 |
поясни, пожалуйста, почему. у меня ведь есть вариант перегрузки оператора + для правого операнда типа charList(без указателя-звёздочки). А слева, как я понял, без разыменовывания не обойтись, да? Добавлено через 2 минуты и 24 секунды вот здесь подробнее. что, неявно вызывается несколько раз? или что? Цыц! Я изучаю перегрузку на простых примерах. Сам её(перегрузку операторов), кстати, считаю злом - интерфейсы куда "прозрачнее" и ортодоксальнее. да и с С++ знаком слабо... |
|||
|
||||
powerfox |
|
|||
![]() I wanna fork() ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 3990 Регистрация: 1.10.2005 Где: Санкт-Петербург Репутация: 2 Всего: 97 |
skyboy, перегрузка и разыменование не есть одно и то же.
|
|||
|
||||
archimed7592 |
|
||||
![]() Архимед ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2531 Регистрация: 12.6.2004 Где: Moscow Репутация: 58 Всего: 93 |
да... можно *zero + zero...
про operator =: писать нужно так
а ты из java к нам пожаловал видимо ![]() Добавлено @ 22:41 конструктор копирования ![]() type var - передача по значению type &var - по ссылке const type &var - по ссылке (объект изменить нельзя) Добавлено @ 22:42 ну и пользуй наздоровье... они медленее правда, ну да ладно ![]() Это сообщение отредактировал(а) archimed7592 - 16.4.2007, 22:43 -------------------- If you have an apple and I have an apple and we exchange apples then you and I will still each have one apple. But if you have an idea and I have an idea and we exchange these ideas, then each of us will have two ideas. © George Bernard Shaw |
||||
|
|||||
skyboy |
|
|||
неОпытный ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 9820 Регистрация: 18.5.2006 Где: Днепропетровск Репутация: 1 Всего: 260 |
||||
|
||||
powerfox |
|
||||||
![]() I wanna fork() ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 3990 Регистрация: 1.10.2005 Где: Санкт-Петербург Репутация: 2 Всего: 97 |
К тому, что этот код не означает, что будет возможно делать:
|
||||||
|
|||||||
skyboy |
|
|||
неОпытный ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 9820 Регистрация: 18.5.2006 Где: Днепропетровск Репутация: 1 Всего: 260 |
льстишь ![]() ![]() я что - я бы с радостью. Брата вот выручать приходится ![]() const charList &another и charList* another - тут имеется радикальная разница? А вот при использовании такой штуки: объект-результат создастся на стеке, да? если да, то вариант передачи правого операнда const another по ссылке меня удивляет. А как же случай: object1 + (object2 + object3)? при выполнении object2 + object3 будет создан объект(а не указатель на него). Получается при работе object1 + result[object2 + object3] будет сложение указателя на класс(charList* object1) и объекта-значения на стеке(charList result), а перегруженного оператора + нет. Или - и не надо? я прошу даже не столько коррекции кода(мне потом сложнее код писать придется), а именно растолковывания, что я неверно разумею ![]() ![]() |
|||
|
||||
Daevaorn |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 2155 Регистрация: 29.11.2004 Где: Москва Репутация: 51 Всего: 70 |
Твой оператор работает с объектами, не с указателями. Что тут не понятного? Складывать два указателя ка-то не логично в данном случае
![]() |
|||
|
||||
skyboy |
|
|||
неОпытный ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 9820 Регистрация: 18.5.2006 Где: Днепропетровск Репутация: 1 Всего: 260 |
powerfox, почему не пройдет? тип параметра в сигнатуре перегрузки оператора и тип правого операнда не совпадают разве?
Добавлено через 1 минуту и 27 секунд
угу. наконец-то понял, спасибо ![]() ![]() |
|||
|
||||
![]() ![]() ![]() |
Правила форума "С++:Общие вопросы" | |
|
Добро пожаловать!
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn |
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | C/C++: Общие вопросы | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |