Вопрос? Перегрузка операторов в C#

Discussion in 'С/С++, C#, Rust, Swift, Go, Java, Perl, Ruby' started by NeuRonix, 29 Aug 2006.

  1. NeuRonix

    NeuRonix Elder - Старейшина

    Joined:
    5 Mar 2006
    Messages:
    19
    Likes Received:
    21
    Reputations:
    8
    Читаю книгу “Шилдт Полный справочник по С#”

    У меня вопрос? Я не хрена не понял, что там Шилдт наколбасил про перегрузки операторов,
    мог бы кто нибуть объяснить поподробней, кое-что, конечно, понял, но не все.

    И если можно, то приведите пример с комментариями или ссылку дайте, где можно
    прочитать, чтоб там все понятно расписано было и c примерами.
     
    #1 NeuRonix, 29 Aug 2006
    Last edited: 23 Sep 2006
  2. tclover

    tclover nobody

    Joined:
    13 Dec 2005
    Messages:
    741
    Likes Received:
    682
    Reputations:
    287
    Ты имеешь ввиду перегрузку функций? ;)
     
  3. NeuRonix

    NeuRonix Elder - Старейшина

    Joined:
    5 Mar 2006
    Messages:
    19
    Likes Received:
    21
    Reputations:
    8
    Честно говоря, я не знаю, может это одно и тоже плоховато у меня с программированием просто жуть )
    Давай и про перегрузку функций объясни, не помешает.
     
  4. tclover

    tclover nobody

    Joined:
    13 Dec 2005
    Messages:
    741
    Likes Received:
    682
    Reputations:
    287
    хз, я не учитель :)... Вообщем если изменять тип и/или количество параметров передаваемых функции, то это и будет называться её перегрузкой.
    зы Это конечно не претендует на лучшее описание.
     
  5. NeuRonix

    NeuRonix Elder - Старейшина

    Joined:
    5 Mar 2006
    Messages:
    19
    Likes Received:
    21
    Reputations:
    8
    Все разобрался, точнее, помогли, оказалось довольно просто.

    На примере операции "+".
    Этот символ обозначает разные операции.
    Например 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;
     
    1 person likes this.
  6. fen

    fen Elder - Старейшина

    Joined:
    23 Sep 2006
    Messages:
    41
    Likes Received:
    6
    Reputations:
    0
    канешно многовато написал.. в подробностях и на примерах... но tclover одним предложением все разъяснил )
     
  7. NeuRonix

    NeuRonix Elder - Старейшина

    Joined:
    5 Mar 2006
    Messages:
    19
    Likes Received:
    21
    Reputations:
    8
    fen- Я рад за тебя, что ты все так быстро схватываешь, мне надо было добраться до сути
    перегрузки я плохо понимал перегрузку, плоховато у меня было с перегрузкой, но сейчас все
    отлично все приходит с опытом.

    Удачного кодинга тебе fen.
     
  8. W!z@rD

    W!z@rD Борец за русский язык

    Joined:
    12 Feb 2006
    Messages:
    973
    Likes Received:
    290
    Reputations:
    43
    Хы... Вобщем я тоже начал изучать C#... по книге:
    "Программирование для Microsoft Windows на C#"
    Кто что может сказать насчет это книги?
    Кто что может посоветовать?
     
  9. nc.STRIEM

    nc.STRIEM Members of Antichat

    Joined:
    5 Apr 2006
    Messages:
    1,036
    Likes Received:
    347
    Reputations:
    292
    Он расказал про перегруженные функции! а перегруженне функции и перегруженные операторы это две обсолютно разные вещи!
    p.s. есть еще перегруженные перегруженные операторы
     
    #9 nc.STRIEM, 29 Sep 2006
    Last edited: 29 Sep 2006
    1 person likes this.