zoukankan      html  css  js  c++  java
  • 运算符重载关键字operator

    operator关键字用来重载内置运算符,使用方法如下:

    public class OperatorController : Controller
    {
            //
            // GET: /Operator/
            public int num, den;
            public OperatorController(int num, int den)
            {
                this.num = num;
                this.den = den;
            }
    
            // overload operator +
            public static OperatorController operator +(OperatorController a, OperatorController b)
            {
                return new OperatorController(a.num * b.den + b.num * a.den, a.den * b.den);
            }
    
            // overload operator *
            public static OperatorController operator *(OperatorController a, OperatorController b)
            {
                return new OperatorController(a.num * b.num, a.den * b.den);
            }
    }

    上面的OperatorController类提供了一个构造函数和"+","*"的重载方法。

    下面是一组执行代码:

    var a = new OperatorController(1, 2);
    var b = new OperatorController(3, 7);
    var c = new OperatorController(2, 3);
    var d = a + b;
    var e = a * b + c;

    为了便于理解,我将执行过程中的变量一一输出:

    a

    Response.Write("a:" + a.num + "--" + a.den + "<br/>");

    输出:a:1--2

    b

    Response.Write("b:" + b.num + "--" + b.den + "<br/>");

    输出:b:3--7

    c

    Response.Write("c:" + c.num + "--" + c.den + "<br/>");

    输出:b:2--3

    d

    Response.Write("d:" + d.num + "--" + d.den + "<br/>");

    输出:d:13--14

    e

    Response.Write("e:" + e.num + "--" + e.den + "<br/>");

    输出:e:37--42

    接下来,重点说一下重载"+"是如何实现的:

    以var d = a + b;为例, 分解一下执行过程,

    step1. 执行"+"重载方法

     public static OperatorController operator +(OperatorController a, OperatorController b)
     {
          return new OperatorController(a.num * b.den + b.num * a.den, a.den * b.den);
     }

    当a和b做"+"运算时,会把a和b作为参数传入到这个重载方法(重载运算符只支持两个参数),通过运算可以演变成

    public static OperatorController operator +(OperatorController a, OperatorController b)
    {
          return new OperatorController(13, 14);
    }

    step2. 执行构造函数

    public OperatorController(int num, int den)
    {
         this.num = num;
         this.den = den;
    }

    所以执行Response.Write("d:" + d.num + "--" + d.den + "<br/>");时,会输出d:13--14

    在下面重载"=="的方法里,没有自己的业务逻辑,跟Equals(x,y)效果一样

    public static bool operator ==(BaseEntity x, BaseEntity y)
    {
         return Equals(x, y);
    }
  • 相关阅读:
    从txt读取数据到Cvmat
    PCA之后进行归一化
    vc中调用exe文件并传递参数
    C#安装包过程
    电脑技巧
    DLL文件的创建与调用
    SVM调用方法
    舌顶上腭位置与作用
    KNN算法的實現
    How to Read a Paper
  • 原文地址:https://www.cnblogs.com/paulhe/p/4550119.html
Copyright © 2011-2022 走看看