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

    本文开发一个Vector结构来说明运算符重载,Vector结构表示一个三维矢量,别担心数学不好,这不是重点。三维矢量只是3个(double)数字的一个集合,说明物体和原点之间的距离,例如(2.0,3.0,5.0)就是表示在三维坐标上x=2.0,y=3.0,z=5.0,这个看不懂,那回家翻书瞧瞧就行。

    注:本文将Vector作为结构开发,而不是类,这也不是问题,运算符重载用于结构和类时都一个样。

    下面是Vector的定义——成员字段、构造函数和重写的ToString()方法,还有重点运算符重载。

     1   struct Vector {
     2         public double x, y, z;
     3 
     4         public Vector (double x,double y,double z ) {
     5             this.x = x; this.y = y; this.z = z;
     6         }
     7 
     8         public Vector ( Vector rhs) {
     9             this.x = rhs.x; this.y = rhs.y; this.z = rhs.z;
    10         }
    11 
    12         //重写ToString方法方便显示Vector的内容
    13         public override string ToString ( ) {
    14             return "(" + x + "," + y + "," + z + ")";
    15         }
    16        
    17         //运算符重载
    18         //C#要求所有的运算符重载都声明为Public和static
    19         public static Vector operator + (Vector lhs, Vector rhs ){
    20             return new Vector ( ) { x=lhs.x+rhs.x ,y =lhs.y+rhs.y ,z=lhs.z +rhs.z  };
    21         }
    22     }

    下面编写一些简单代码来测试Vector结构:

      static void Main ( string[ ] args ) {
                Vector vect1, vect2, vect3;
                vect1 = new Vector ( 4, 5, 6 );
                vect2 = new Vector ( 1, 2, 3 );
                vect3 = vect1 + vect2;
                Console.WriteLine ("vect1:"+ vect1.ToString ());
                Console.WriteLine ( "vect2:" + vect2.ToString ( ) );
                Console.WriteLine ( "vect3:" + vect3.ToString ( ) );
                Console.ReadKey ( );
            }

    注:加法没啥问题,如乘法的重载参数为(Vector lhs, double rhs)时,测试Vect=2*Vect1时将会找不到重载方法导致编译错误(编译器不会自动帮我们交换参数)。

    以上是最简单的运算符重载,当然还可以重载其它运算符,包括逻辑运算符(如==、>= ....),但是重载"=="和"!="的时候还必须重载System.Object中继承的Equals()和GetHashCode(),因为Equals()与"=="运算符是相等的逻辑运算。

    其它的运算符就自己玩去吧。

  • 相关阅读:
    设置通过数字证书方式登录远程连接Linux服务器,禁止root账户远程密码方式远程连接服务器
    Windows server 2003 粘滞键后门+提权
    CVE-2017-7494复现 Samba远程代码执行
    SQL盲注学习-时间型
    SQL盲注学习-布尔型
    关于绿盟RSAS使用时遇到的问题
    SQL注入学习
    CentOS7,zabbix3.4通过,zabbix-Java-gateway监控Tomcat
    (转)输入pipt提示:AttributeError: 'module' object has no attribute 'HTTPSConnection'
    pip安装cx_Oracle报错:error code 1 in /tmp/pip-build-root/cx-Oracle
  • 原文地址:https://www.cnblogs.com/xiaoyu5062/p/2580607.html
Copyright © 2011-2022 走看看