Antichat снова доступен.
Форум Antichat (Античат) возвращается и снова открыт для пользователей.
Здесь обсуждаются безопасность, программирование, технологии и многое другое.
Сообщество снова собирается вместе.
Новый адрес: forum.antichat.xyz
 |
Вопрос? Перегрузка операторов в C# |

29.08.2006, 14:40
|
|
Познающий
Регистрация: 05.03.2006
Сообщений: 50
Провел на форуме: 647440
Репутация:
44
|
|
Вопрос? Перегрузка операторов в C#
Читаю книгу “Шилдт Полный справочник по С#”
У меня вопрос? Я не хрена не понял, что там Шилдт наколбасил про перегрузки операторов,
мог бы кто нибуть объяснить поподробней, кое-что, конечно, понял, но не все.
И если можно, то приведите пример с комментариями или ссылку дайте, где можно
прочитать, чтоб там все понятно расписано было и c примерами.
Последний раз редактировалось NeuRonix; 23.09.2006 в 12:09..
|
|
|

29.08.2006, 14:59
|
|
Banned
Регистрация: 13.12.2005
Сообщений: 1,091
Провел на форуме: 9751364
Репутация:
1847
|
|
Ты имеешь ввиду перегрузку функций? 
|
|
|

29.08.2006, 15:12
|
|
Познающий
Регистрация: 05.03.2006
Сообщений: 50
Провел на форуме: 647440
Репутация:
44
|
|
Честно говоря, я не знаю, может это одно и тоже плоховато у меня с программированием просто жуть )
Давай и про перегрузку функций объясни, не помешает.
|
|
|

29.08.2006, 15:36
|
|
Banned
Регистрация: 13.12.2005
Сообщений: 1,091
Провел на форуме: 9751364
Репутация:
1847
|
|
хз, я не учитель  ... Вообщем если изменять тип и/или количество параметров передаваемых функции, то это и будет называться её перегрузкой.
зы Это конечно не претендует на лучшее описание.
|
|
|

31.08.2006, 15:24
|
|
Познающий
Регистрация: 05.03.2006
Сообщений: 50
Провел на форуме: 647440
Репутация:
44
|
|
Все разобрался, точнее, помогли, оказалось довольно просто.
На примере операции "+".
Этот символ обозначает разные операции.
Например 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;
|
|
|

29.09.2006, 16:00
|
|
Познающий
Регистрация: 23.09.2006
Сообщений: 45
Провел на форуме: 308259
Репутация:
20
|
|
Сообщение от NeuRonix
Честно говоря, я не знаю, может это одно и тоже плоховато у меня с программированием просто жуть )
Давай и про перегрузку функций объясни, не помешает.
канешно многовато написал.. в подробностях и на примерах... но tclover одним предложением все разъяснил )
|
|
|

29.09.2006, 16:26
|
|
Познающий
Регистрация: 05.03.2006
Сообщений: 50
Провел на форуме: 647440
Репутация:
44
|
|
fen- Я рад за тебя, что ты все так быстро схватываешь, мне надо было добраться до сути
перегрузки я плохо понимал перегрузку, плоховато у меня было с перегрузкой, но сейчас все
отлично все приходит с опытом.
Удачного кодинга тебе fen.
|
|
|

29.09.2006, 21:11
|
|
Reservists Of Antichat - Level 6
Регистрация: 12.02.2006
Сообщений: 891
Провел на форуме: 1892597
Репутация:
836
|
|
Хы... Вобщем я тоже начал изучать C#... по книге:
"Программирование для Microsoft Windows на C#"
Кто что может сказать насчет это книги?
Кто что может посоветовать?
__________________
*********************************
*Я не волшебник ٩(๏̯͡๏)۶, только учусь...*
*********************************
Программы на заказ
Times to fly...
|
|
|

29.09.2006, 23:45
|
|
Members of Antichat - Level 5
Регистрация: 05.04.2006
Сообщений: 1,066
Провел на форуме: 3493315
Репутация:
1228
|
|
Сообщение от fen
канешно многовато написал.. в подробностях и на примерах... но tclover одним предложением все разъяснил )
Он расказал про перегруженные функции! а перегруженне функции и перегруженные операторы это две обсолютно разные вещи!
p.s. есть еще перегруженные перегруженные операторы
Последний раз редактировалось nc.STRIEM; 29.09.2006 в 23:49..
|
|
|
|
 |
|
Здесь присутствуют: 1 (пользователей: 0 , гостей: 1)
|
|
|
|