![]() |
|
Модераторы: Partizan, gambit |
![]()
|
|
| MasterOfCode |
|
|||
|
elwin ![]() ![]() Профиль Группа: Участник Сообщений: 740 Регистрация: 24.4.2008 Где: World.Russia.Tyum en Репутация: 2 Всего: 27 |
Очень часто встречается на форуме выражение "перегрузка методов", "перегрузка операторов"... Я не совсем понимаю что под ними подразумевается, поясните пожалуйста?
-------------------- ![]() |
|||
|
||||
| Kefir |
|
|||
|
«Hakuna Matata» ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 1878 Регистрация: 25.1.2003 Где: Tampere, Suomi Репутация: нет Всего: 87 |
эт если одна и та же функция определяется два раза с разными аргументами:
|
|||
|
||||
| MasterOfCode |
|
|||
|
elwin ![]() ![]() Профиль Группа: Участник Сообщений: 740 Регистрация: 24.4.2008 Где: World.Russia.Tyum en Репутация: 2 Всего: 27 |
Ыыы... Часто пользовался, и не знал как называется )))
-------------------- ![]() |
|||
|
||||
| Ronin08 |
|
||||
![]() Бывалый ![]() Профиль Группа: Участник Сообщений: 218 Регистрация: 16.2.2008 Где: г.Москва Репутация: нет Всего: 1 |
Перегрузка операций:
Предположим у вас есть определенный класс, представляющий математическую матрицу. Матрицы можно перемножать и складывать подобно обычным числам. Поэтому скорее всего вы захотите написать код подобно :
С помощью перегрузки операций вы можете сообщить компилятору что делают + и * при использовании с Matrix, что позволит записать вышепреведенный код Если бы вы определили методы выполняющие такие операции , то результат был бы менее интуитивно понятным
--------------------
Зачем вставать рано или поздно? Надо вставать вовремя |
||||
|
|||||
| SmartBye |
|
|||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 60 Регистрация: 15.5.2008 Репутация: нет Всего: нет |
А что же тогда такое перегрузка переменной? о_О
|
|||
|
||||
| QryStaL |
|
|||
![]() Intellectual feast ![]() ![]() Профиль Группа: Участник Сообщений: 914 Регистрация: 30.11.2005 Репутация: 10 Всего: 32 |
Ronin08, перегрузка операторов, а не операций. Операции - методы, а перегрузка методов имеет другой смысл.
SmartBye, первый раз слышу. Подробнее, что имеется в виду? -------------------- I don't need a reason being who I am... |
|||
|
||||
| sobik |
|
|||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 63 Регистрация: 21.3.2008 Где: Киев, Украина. Репутация: 1 Всего: 1 |
И мне тоже стало интересно
|
|||
|
||||
| Ronin08 |
|
||||||||||
![]() Бывалый ![]() Профиль Группа: Участник Сообщений: 218 Регистрация: 16.2.2008 Где: г.Москва Репутация: нет Всего: 1 |
Как я понял перегрузка операторов = перегрузка математических операций!!! Или какие операторы вы имеете в виду? Неужели break, continue, if, for и т.д.? Это сообщение отредактировал(а) Ronin08 - 22.5.2008, 22:11 --------------------
Зачем вставать рано или поздно? Надо вставать вовремя |
||||||||||
|
|||||||||||
| SmartBye |
|
|||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 60 Регистрация: 15.5.2008 Репутация: нет Всего: нет |
||||
|
||||
| Ronin08 |
|
|||
![]() Бывалый ![]() Профиль Группа: Участник Сообщений: 218 Регистрация: 16.2.2008 Где: г.Москва Репутация: нет Всего: 1 |
А что? Погуглил! Точную ссылку не помню. Честноговоря я редко встречаю "Перегрузка операторов", но судя из текстика = Перегрузка мат операций! --------------------
Зачем вставать рано или поздно? Надо вставать вовремя |
|||
|
||||
| MasterOfCode |
|
|||
|
elwin ![]() ![]() Профиль Группа: Участник Сообщений: 740 Регистрация: 24.4.2008 Где: World.Russia.Tyum en Репутация: 2 Всего: 27 |
Такой вопрос, если я прегружу оператор "+" для матрицы, то оператор "+" изменится для всех, и мне нужно будет перегрузить его обратно?
-------------------- ![]() |
|||
|
||||
| QryStaL |
|
|||
![]() Intellectual feast ![]() ![]() Профиль Группа: Участник Сообщений: 914 Регистрация: 30.11.2005 Репутация: 10 Всего: 32 |
MasterOfCode, Нет конечно. При перегрузке указываются типы операндов, для которых она осуществляется.
Добавлено через 11 минут и 8 секунд Ronin08, операторы не ограничиваются математическими операциями: +, -, !, ~, ++, --, true, false These unary operators can be overloaded. +, -, *, /, %, &, |, ^, <<, >> These binary operators can be overloaded. ==, !=, <, >, <=, >= The comparison operators, if overloaded, must be overloaded in pairs; that is, if == is overloaded, != must also be overloaded. The reverse is also true, and similar for < and >, and for <= and >=. -------------------- I don't need a reason being who I am... |
|||
|
||||
| SmartBye |
|
|||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 60 Регистрация: 15.5.2008 Репутация: нет Всего: нет |
Вот тут посмотрите - http://www.intuit.ru/department/pl/csharp/.../free/16/6.html На мой взгляд удачный пример. Автор создал класс рациональных чисел и перегрузил большинство возможных операторов, в том числе и логические, для работы с этими классами. Описание класса находится в начале лекции. Это сообщение отредактировал(а) SmartBye - 23.5.2008, 09:50 |
|||
|
||||
| MasterOfCode |
|
|||
|
elwin ![]() ![]() Профиль Группа: Участник Сообщений: 740 Регистрация: 24.4.2008 Где: World.Russia.Tyum en Репутация: 2 Всего: 27 |
Интересно, спасибо...
Но все таки я так понимаю что перегружают операторы только для читабельности кода? Или есть еще какие-то случаи когда следует перегрузить операторы? -------------------- ![]() |
|||
|
||||
| Ronin08 |
|
|||
![]() Бывалый ![]() Профиль Группа: Участник Сообщений: 218 Регистрация: 16.2.2008 Где: г.Москва Репутация: нет Всего: 1 |
И еще, если перегружаете == и != , то также надо переопределить методы Equals() и GetHashCode() , иначе получите пркдупреждение кампилятора --------------------
Зачем вставать рано или поздно? Надо вставать вовремя |
|||
|
||||
![]()
|
| Прежде чем создать тему, посмотрите сюда: | |
|
|
Используйте теги [code=csharp][/code] для подсветки кода. Используйтe чекбокс "транслит" если у Вас нет русских шрифтов. Что делать если Вам помогли, но отблагодарить помощника плюсом в репутацию Вы не можете(не хватает сообщений)? Пишите сюда, или отправляйте репорт. Поставим :) Так же не забывайте отмечать свой вопрос решенным, если он таковым является :) Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, mr.DUDA, Partizan, PashaPash. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | .NET для новичков | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |