运算符重载实例——Nybble

来源:互联网 发布:网络的攻击与防范 编辑:程序博客网 时间:2024/05/02 05:01
<span style="font-size:18px;">这是书上的实例,自己动手实践了一下,发现还是有些问题的,真的需要上手打一遍才能理清楚。</span>
<span style="font-size:18px;">/*Nybble.cs*/using System;/* * 用4个位表示的无符号整数,前4位置0; * */class Nybble{    int value;    #region  成员函数    public Nybble()    {        this.value = 0;    }    public Nybble(int N)    {        this.value = N & 0xF;    }//隐式转换</span></span>
<span style="font-size:18px;">    public static implicit operator int(Nybble ob)    {        return ob.value;    }    public static implicit operator Nybble(int N)    {        return new Nybble(N);    }</span>
<span style="font-size:18px;">//运算符重载,包括+ < > <= >= == != ++ --等,全部都是static静态的,不知道好处是什么。    public static int operator +(Nybble ob, int N)    {        return ob.value + N;    }    public static int operator +(int N, Nybble ob)    {        return ob.value + N;    }    public static Nybble operator +(Nybble ob1, Nybble ob2)    {        Nybble result = new Nybble();        result.value = ob1.value + ob2.value;        result.value &= 0xF;        return result;    }    public static bool operator <(Nybble ob1, Nybble ob2)    {        return ob1.value < ob2.value;    }    public static bool operator >(Nybble ob1, Nybble ob2)    {        return ob1.value > ob2.value;    }    public static bool operator <=(Nybble ob1, Nybble ob2)    {        return ob1.value <= ob2.value;    }    public static bool operator >=(Nybble ob1, Nybble ob2)    {        return ob1.value >= ob2.value;    }    public static bool operator ==(Nybble ob1, Nybble ob2)    {        return ob1.value == ob2.value;    }    public static bool operator !=(Nybble ob1, Nybble ob2)    {        return ob1.value != ob2.value;    }    public static Nybble operator ++(Nybble ob)    {        Nybble result = new Nybble();        result.value = ++ob.value;        result.value &= 0xf;        return result;    }    public static Nybble operator --(Nybble ob)    {        Nybble result = new Nybble();        result.value = --ob.value;        result.value &= 0xf;        return result;    }    #endregion}</span>
<span style="font-size:18px;">下面是这个类的小Demo。也就简单的创建了三个实例A,B,C,一个用默认构造,两个用自己写的带int参数的构造函数。</span>
<span style="font-size:18px;">需要注意的是,初始化的值不能超过15,因为只用4bit表示(0000(2)~1111(2)),如果是16以上的话,就用到5bit(16=10000(2))</span>
<span style="font-size:18px;">执行value &= 0xF;时高4位会被置0。(00010000 & 00001111 = 00000000)</span>
<span style="font-size:18px;">/*NybbleDemo.cs*/using System;class NybbleDemo{    public static int Main()    {        Nybble A = new Nybble();        Nybble B = new Nybble(10);        Nybble C = new Nybble(2);        Console.WriteLine(A);        Console.WriteLine(B);        Console.WriteLine(C);        Console.WriteLine(A+B+C);//执行此句时,先算A+B,结果是一个Nybble的引用(result),再执行result+C,返回值也是一个Nybble引用(result2),再隐式转换为int型以供输出。        return 0;    }}</span>


0 0
原创粉丝点击