![]() |
|
Модераторы: Partizan, gambit |
![]()
|
|
| Neuromancer |
|
|||
![]() Новичок Профиль Группа: Участник Сообщений: 4 Регистрация: 23.6.2006 Репутация: нет Всего: нет |
Читаю книгу “Шилдт Полный справочник по С#”
У меня вопрос? Я не хрена не понял, что там Шилдт наколбасил про перегрузки операторов, мог бы кто нибуть объяснить поподробней, кое-что, конечно, понял, но не все. И если можно, то приведите пример с комментариями или ссылку дайте, где можно прочитать, чтоб там все понятно расписано было и cпримерами. |
|||
|
||||
| marcusmae |
|
|||
![]() stravaganza ![]() ![]() Профиль Группа: Участник Сообщений: 874 Регистрация: 26.3.2006 Репутация: 22 Всего: 39 |
Ссылок полно. А вообще, вряд ли сильно много умеющих объяснить лучше Шилдта.
То есть, имеет смысл задать более конкретные вопросы о том, что непонятно. Мы попробуем ответить ;) -------------------- ἀπὸ μηχανῆς θεός |
|||
|
||||
| reloni |
|
||||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 112 Регистрация: 10.5.2006 Где: Москва Репутация: 3 Всего: 4 |
Это точно Но вот пример, практически под копирку списанный у Троелсена, может он поможет:
Перегрузки "+" и "-" вызывают соответственно методы Add и Sub, в принципе можно и не плодить дополнительных методов. Эти метды возвращают новый класс, с измененными координатами. Теперь можно написать:
|
||||
|
|||||
| marcusmae |
|
||||||
![]() stravaganza ![]() ![]() Профиль Группа: Участник Сообщений: 874 Регистрация: 26.3.2006 Репутация: 22 Всего: 39 |
override потому что подразумевается переопределение метода, унаследованного классом Point от System.Object :
который определяет методы GetType(), ToString(), Equal(), GetHashCode() и др. :
и ещё, функции перегрузки операторов всегда статические (static). То есть, общие для всех экземпляров класса Point. Это сообщение отредактировал(а) marcusmae - 29.8.2006, 18:54 -------------------- ἀπὸ μηχανῆς θεός |
||||||
|
|||||||
| ivashkanet |
|
||||||||
![]() Кодю потиху ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 3684 Регистрация: 23.2.2006 Где: Гомель, Беларусь Репутация: 47 Всего: 149 |
reloni, попробую я немного объяснить
На примере операции "+". Этот символ обозначает разные операции. Например 1+1 --- опирация сложения чисел (ответ 2) А если "1" -- строка, то + будет складывать именно строки, а не их значения. Алгоритм этого действия другой и в ответе уже будет "11" -- склейка этих строк. Получается, что результат одной и той же операции зависит от того что мы складываем (это естественно). По умолчанию, язык C# не в курсе как складываются точки (Point). Поэтому его нужно этому учить:
Внутри ты можешь поставить любую реализацию (даже попарно умножить их). Мы только что научили C# складывать Точки. Можно научить умножать Точку на число:
Можно эту же операцию применить к скалярному умножению точек:
И так далее.... В последних двух примерах мы и сталкиваемся с перегрузкой. Т.е. Когда один и тот же оператор (*) имеет разные реализации (но!, что важно для разных аргументов). Как же компилятор определяет какую реализацию выбрать? Очень просто: Если ты перемножаешь число и Точку (именно в этом порядке
|
||||||||
|
|||||||||
| Neuromancer |
|
|||
![]() Новичок Профиль Группа: Участник Сообщений: 4 Регистрация: 23.6.2006 Репутация: нет Всего: нет |
ivashkanet- Спасибо тебе огромное вот люди учитесь, как надо объяснять.
|
|||
|
||||
| ivashkanet |
|
|||
![]() Кодю потиху ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 3684 Регистрация: 23.2.2006 Где: Гомель, Беларусь Репутация: 47 Всего: 149 |
Neuromancer, не за что
|
|||
|
||||
| VisualProgrammerNET |
|
|||
![]() Почётный халявщик ![]() ![]() Профиль Группа: Участник Сообщений: 461 Регистрация: 30.10.2005 Где: Зеленоград Репутация: 4 Всего: 6 |
Никогда не любил заморачиваться с этими операторами... проще написать один метод типа
-------------------- 3 ГОДА НА |
|||
|
||||
| reloni |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 112 Регистрация: 10.5.2006 Где: Москва Репутация: 3 Всего: 4 |
VisualProgrammerNET, ингда бывает проще написать
Чем вызывать каждый раз статический метод. Особенно если это надо делать часто. |
|||
|
||||
| $tatic |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 651 Регистрация: 28.1.2005 Репутация: 2 Всего: 22 |
Для векторов и матриц к тому же полезно. Хотя для векторов и существует два типа умножения.
|
|||
|
||||
![]()
|
| Прежде чем создать тему, посмотрите сюда: | |
|
|
Используйте теги [code=csharp][/code] для подсветки кода. Используйтe чекбокс "транслит" если у Вас нет русских шрифтов. Что делать если Вам помогли, но отблагодарить помощника плюсом в репутацию Вы не можете(не хватает сообщений)? Пишите сюда, или отправляйте репорт. Поставим :) Так же не забывайте отмечать свой вопрос решенным, если он таковым является :) Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, mr.DUDA, THandle. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | Общие вопросы по .NET и C# | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |