Форум программистов, компьютерный форум CyberForum.ru

Перегрузка оператора.Почему так происходит? - C++

Восстановить пароль Регистрация
 
Borkot
 Аватар для Borkot
4 / 4 / 0
Регистрация: 05.05.2012
Сообщений: 182
Записей в блоге: 1
17.01.2013, 00:08     Перегрузка оператора.Почему так происходит? #1
У нас есть перегрузка оператора.
C++
1
2
3
4
5
6
Digit operator-(const Digit &N)
    {
        Digit temp;
        temp.dig=dig-N.dig;
        return temp;
    }
Так почему когда мы передаем в функцию только один адрес,у нас функция при вычислении А-В знает значение А,Не совсем понятно мы передали один адрес В,Откуда она знает о значении А?
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
17.01.2013, 00:08     Перегрузка оператора.Почему так происходит?
Посмотрите здесь:

C++ Почему так происходит и как это устранить
C++ Когда в С++ перегрузка не происходит?
потоки почему так происходит ? C++
too few arguments to function. почему так происходит? C++
cannot convert `float' to `float*. Почему так происходит? C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Wolkodav
 Аватар для Wolkodav
599 / 452 / 32
Регистрация: 18.09.2012
Сообщений: 1,685
17.01.2013, 00:18     Перегрузка оператора.Почему так происходит? #2
А описание оператора находится в классе я так понимаю?

Добавлено через 5 минут
Если находится внутри класса, то в метод класса при его вызове неявно передаётся указатель this, это указатель на тот объект который вызывает данный метод, и мы как бы вычитаем из объекта который вызывает данный метод, другой объект того-же типа( или приводимого к данному типу).
Ваша запись и моя эквиволентны. (*this)-это и есть тот второй объект А
C++
1
2
3
4
5
6
Digit operator-(const Digit &N)
    {
        Digit temp;
        temp.dig=(*this).dig-N.dig;
        return temp;
    }
Есть фнукциональная запись вызова этого метода
A-B; или A.operator-(B); две одинаковые записи.
Borkot
 Аватар для Borkot
4 / 4 / 0
Регистрация: 05.05.2012
Сообщений: 182
Записей в блоге: 1
17.01.2013, 10:13  [ТС]     Перегрузка оператора.Почему так происходит? #3
да описания находятся в классе.Спасибо!

Добавлено через 3 минуты
Да я тоже смотрел,по output выходным данным,там тоже встречался указатель *this, Я так и подозревал что это именно он,но это только подозрения.)))

Добавлено через 1 минуту
Хорошо а если вне класса описание.Я так понимаю прототипы в классе, а в .срр файле описание,там по другому?
UserAK
70 / 70 / 4
Регистрация: 25.12.2012
Сообщений: 189
Записей в блоге: 2
17.01.2013, 10:32     Перегрузка оператора.Почему так происходит? #4
если в cpp то то же самое, можно без this
C++
1
2
3
4
5
6
Digit Digit::operator-(const Digit &N)
    {
        Digit temp;
        temp.dig=dig-N.dig;
        return temp;
    }
Yandex
Объявления
17.01.2013, 10:32     Перегрузка оператора.Почему так происходит?
Ответ Создать тему
Опции темы

Текущее время: 15:52. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru