![]() |
Вопрос? Перегрузка операторов в C#
Читаю книгу “Шилдт Полный справочник по С#”
У меня вопрос? Я не хрена не понял, что там Шилдт наколбасил про перегрузки операторов, мог бы кто нибуть объяснить поподробней, кое-что, конечно, понял, но не все. И если можно, то приведите пример с комментариями или ссылку дайте, где можно прочитать, чтоб там все понятно расписано было и c примерами. |
Ты имеешь ввиду перегрузку функций? ;)
|
Честно говоря, я не знаю, может это одно и тоже плоховато у меня с программированием просто жуть )
Давай и про перегрузку функций объясни, не помешает. |
хз, я не учитель :)... Вообщем если изменять тип и/или количество параметров передаваемых функции, то это и будет называться её перегрузкой.
зы Это конечно не претендует на лучшее описание. |
Все разобрался, точнее, помогли, оказалось довольно просто.
На примере операции "+". Этот символ обозначает разные операции. Например 1+1 --- опирация сложения чисел (ответ 2) А если "1" -- строка, то + будет складывать именно строки, а не их значения. Алгоритм этого действия другой и в ответе уже будет "11" -- склейка этих строк. Получается, что результат одной и той же операции зависит от того что мы складываем (это естественно). По умолчанию, язык C# не в курсе как складываются точки (Point). Поэтому его нужно этому учить: код C# public static Point operator +(Point cl1, Point cl2) Внутри ты можешь поставить любую реализацию (даже попарно умножить их). Мы только что научили C# складывать Точки. Можно научить умножать Точку на число: код C# public static Point operator *(int cl1, Point cl2) Можно эту же операцию применить к скалярному умножению точек: код C# public static int operator *(Point cl1, Point cl2) И так далее.... В последних двух примерах мы и сталкиваемся с перегрузкой. Т.е. Когда один и тот же оператор (*) имеет разные реализации (но!, что важно для разных аргументов). Как же компилятор определяет какую реализацию выбрать? Очень просто: Если ты перемножаешь число и Точку (именно в этом порядке ), то нужно выбирать первую реализацию, если две точки, то вторую. код C# Point cl1 = new Point(1, 5); Point cl2 = new Point(-8, 10); int i = 5; Point cl3 = i * cl2; // Можно было написать 5 * cl2 // cl3 = cl2 * i --- выдаст ошибку компиляции, ведь мы не написали (не определили), // что делать если первый параметр точка, а второй число :thumbs-up int j = cl1 * cl2; |
Цитата:
|
fen- Я рад за тебя, что ты все так быстро схватываешь, мне надо было добраться до сути
перегрузки я плохо понимал перегрузку, плоховато у меня было с перегрузкой, но сейчас все отлично все приходит с опытом. Удачного кодинга тебе fen. |
Хы... Вобщем я тоже начал изучать C#... по книге:
"Программирование для Microsoft Windows на C#" Кто что может сказать насчет это книги? Кто что может посоветовать? |
Цитата:
p.s. есть еще перегруженные перегруженные операторы |
| Время: 18:18 |