zoukankan      html  css  js  c++  java
  • C#中的运算符重载

    C# 允许用户自定义类型通过使用 operator 关键字定义静态成员函数来重载运算符。

    注意:

    • 必须用public修饰,必须是类的静态的方法。
    • 重载相等运算符(==)时,还必须重载不相等运算(!=)。
    • < 和 > 运算符以及 <= 和 >= 运算符也必须成对重载。


    可以重载的运算符:

    • 可以重载的一元运算符:+、-、!、~、++、--、true 和 false
    • 可以重载的二进制运算符:+, -, *, /, %, &, |, ^, <<, >>
    • 可以重载的比较运算符:==, !=, <, >, <=, >=

    不能重载的运算符:

    • &&, || 条件逻辑运算符不能重载,但可使用能够重载的 & 和 | 进行计算。
    • []不能重载数组索引运算符,但可定义索引器。
    • ()不能重载转换运算符,但可定义新的转换运算符(请参见 explicit 和 implicit)。
    • +=, -=, *=, /=, %=, &=, |=, ^=, <<=, >>=赋值运算符不能重载,但 += 可使用 + 计算
    • =、.、?:、->、new、is、sizeof 和 typeof 不能重载这些运算符。

    注意:

    • 若要在自定义类中重载运算符,您需要在该类中创建具正确签名的方法。该方法必须命名为“operator X”,其中 X 是正在重载的运算符的名称或符号。
    • 一元运算符具有一个参数,二元运算符具有两个参数。
    • 在每种情况下,参数的类型必须与声明运算符的类或结构的类型相同。

     下面是个人写的一小段练习代码:

     1 /* 设计一个复数类(Complex),
     2  * 包含两个字段(实部x和虚部y),
     3  * 对运算符进行重载,实现两个
     4  * 复数的加法和减法运算、
     5  * 以及判断两个复数是否一致
     6  */
     7 
     8 using System;
     9 using System.Collections.Generic;
    10 using System.Linq;
    11 using System.Text;
    12 
    13 namespace homeWork4
    14 {
    15     class Program
    16     {
    17         static void Main(string[] args)
    18         {
    19             Complex com1, com2, com3;
    20             com1 = new Complex(1, 4);
    21             com2 = new Complex(2, 6);
    22             com3 = new Complex();
    23             com3 = com1 + com2;
    24             Console.WriteLine(com1 + " + " + com2 + " = " + com3);
    25             com3 = com1 - com2;
    26             Console.WriteLine(com1 + " - " + com2 + " = " + com3);
    27             if (com1 == com2)
    28                 Console.WriteLine("com1和com2一致");
    29             else
    30                 Console.WriteLine("com1和com2不一致");
    31             Console.ReadKey();
    32         }
    33     }
    34 
    35     class Complex
    36     {
    37         public double x, y;
    38         public Complex()
    39         { x = y = 0; }
    40         public Complex(double x, double y)
    41         {
    42             this.x = x;
    43             this.y = y;
    44         }
    45         public static Complex operator +(Complex comp1, Complex comp2)
    46         {
    47             Complex comp = new Complex();
    48             comp.x = comp1.x + comp2.x;
    49             comp.y = comp1.y + comp2.y;
    50             return comp;
    51         }
    52         public static Complex operator -(Complex comp1, Complex comp2)
    53         {
    54             Complex comp = new Complex();
    55             comp.x = comp1.x - comp2.x;
    56             comp.y = comp1.y - comp2.y;
    57             return comp;
    58         }
    59         public override string ToString()
    60         {
    61             return "(" + x + "," + y + ")";
    62         }
    63         public static bool operator ==(Complex c1, Complex c2)
    64         {
    65             //将c1对象转为object再进行判断  
    66             //这里的object.Equals(c1, null)也可以写成  
    67             //c1 as object == null  
    68             if (object.Equals(c1, null) || object.Equals(c2, null))
    69             {
    70                 return object.Equals(c1, c2);
    71             }
    72             return c1.x == c2.x && c1.y == c2.y;
    73         }
    74 
    75         public static bool operator !=(Complex c1, Complex c2)
    76         {
    77             if (object.Equals(c1, null) || object.Equals(c2, null))
    78             {
    79                 return !object.Equals(c1, c2);
    80             }
    81             return c1.x != c2.x || c1.y != c2.y;
    82         }
    83     };
    84 }

    作者:耑新新,发布于  博客园

    转载请注明出处,欢迎邮件交流:zhuanxinxin@aliyun.com

  • 相关阅读:
    [ SHOI 2012 ] 随机树
    [ BZOJ 4318 & 3450 / CodeForces 235 B ] OSU!
    [ HNOI 2015 ] 亚瑟王
    [ JSOI 2015 ] Salesman
    [ ZJOI 2007 ] 时态同步
    [ Luogu Contest 10364 ] TG
    [ CodeForces 17 E ] Palisection
    [ BZOJ 2160 ] 拉拉队排练
    Manacher 学习笔记
    [ CodeForces 865 D ] Buy Low Sell High
  • 原文地址:https://www.cnblogs.com/Arthurian/p/6087412.html
Copyright © 2011-2022 走看看