| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > .NET для новичков > Перегрузка методов |
| Автор: MasterOfCode 22.5.2008, 07:53 |
| Очень часто встречается на форуме выражение "перегрузка методов", "перегрузка операторов"... Я не совсем понимаю что под ними подразумевается, поясните пожалуйста? |
| Автор: Kefir 22.5.2008, 07:56 | ||
эт если одна и та же функция определяется два раза с разными аргументами:
|
| Автор: MasterOfCode 22.5.2008, 08:02 |
| Ыыы... Часто пользовался, и не знал как называется ))) |
| Автор: Ronin08 22.5.2008, 16:38 | ||||
| Перегрузка операций: Предположим у вас есть определенный класс, представляющий математическую матрицу. Матрицы можно перемножать и складывать подобно обычным числам. Поэтому скорее всего вы захотите написать код подобно :
С помощью перегрузки операций вы можете сообщить компилятору что делают + и * при использовании с Matrix, что позволит записать вышепреведенный код Если бы вы определили методы выполняющие такие операции , то результат был бы менее интуитивно понятным
|
| Автор: SmartBye 22.5.2008, 16:48 |
| А что же тогда такое перегрузка переменной? о_О |
| Автор: QryStaL 22.5.2008, 17:11 |
| Ronin08, перегрузка операторов, а не операций. Операции - методы, а перегрузка методов имеет другой смысл. SmartBye, первый раз слышу. Подробнее, что имеется в виду? |
| Автор: sobik 22.5.2008, 18:13 |
| И мне тоже стало интересно |
| Автор: Ronin08 22.5.2008, 21:53 | ||||||||||
Как я понял перегрузка операторов = перегрузка математических операций!!! Или какие операторы вы имеете в виду? Неужели break, continue, if, for и т.д.? |
| Автор: SmartBye 22.5.2008, 23:27 |
Это написал автор топика, вот мне и интересно стало... Но, судя по всему, он просто не понял, что сказал. Ronin08, а откуда текстик? |
| Автор: Ronin08 23.5.2008, 00:00 | ||
А что? Погуглил! Точную ссылку не помню. Честноговоря я редко встречаю "Перегрузка операторов", но судя из текстика = Перегрузка мат операций! |
| Автор: MasterOfCode 23.5.2008, 07:48 |
| Такой вопрос, если я прегружу оператор "+" для матрицы, то оператор "+" изменится для всех, и мне нужно будет перегрузить его обратно? |
| Автор: QryStaL 23.5.2008, 09:03 |
| 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 >=. |
| Автор: SmartBye 23.5.2008, 09:49 | ||
Вот тут посмотрите - http://www.intuit.ru/department/pl/csharp/class/free/16/6.html На мой взгляд удачный пример. Автор создал класс рациональных чисел и перегрузил большинство возможных операторов, в том числе и логические, для работы с этими классами. Описание класса находится в начале лекции. |
| Автор: MasterOfCode 23.5.2008, 10:57 |
| Интересно, спасибо... Но все таки я так понимаю что перегружают операторы только для читабельности кода? Или есть еще какие-то случаи когда следует перегрузить операторы? |
| Автор: Ronin08 23.5.2008, 12:11 | ||
И еще, если перегружаете == и != , то также надо переопределить методы Equals() и GetHashCode() , иначе получите пркдупреждение кампилятора |