运算符重载

重新定义某个运算符提供的功能,如可使用“+”操作自己定义的类

用例子引出该运算符重载的意义

如果没有运算符重载的功能,当要实现如下功能时:

  • 自己定义一个类MyNum,其有一个int型成员变量val,期望+对于2个MyNum类型的变量的功能是生成一个MyNum类型的值,其val为前面2个MyNum的val相加

可以通过自己定义一个方法(如Add)来实现上述功能,但为了 增强代码的可读性,可以直接重载运算符+实现上述功能

二元运算符(需2个参数)

重定义运算符时,构建一个方法成员,其名称为要重定义的运算符(如+),其前面用operator修饰,需注意的是该方法必须是public和static的

操作符重载必须是public和static的.png
class MyNum
{
    public int val;
    public MyNum(int i) { val = i; }
    public static MyNum operator +(MyNum a, MyNum b)
    {
        return new MyNum(a.val + b.val);
    }

    static void Main()
    {
        MyNum a = new MyNum(1);
        MyNum b = new MyNum(3);
        MyNum c = a + b;
        // 显示结果为4
        Console.WriteLine(c.val);
        Console.ReadLine();
    }
}

一元运算符(需1个参数,如++、--)

public static MyNum operator ++(MyNum a)
{
    return new MyNum(a.val + 1);
}

对返回值和参数的要求

一元:参数(1个)和返回值的类型都必须是当前重载方法所属的类型
二元:参数(2个)中至少有1个的类型必须是当前重载方法所属的类型

可重载的运算符

并非所有运算符都可重载
如下是不可重载的运算符

  • && || = . [ ] ( ) :: ?: ?? -> => new as is sizeof typeof nameof

如下操作符必须成对重载(重载了一个就必须重载另一个)

  • true和false
  • =和!=

对bool型运算符重载的要求

bool型运算符:true和false
重载方法返回类型必须为bool(返回值表示当前重置的运算符)

你可能感兴趣的:(运算符重载)