Chinaunix首页 | 论坛 | 博客
  • 博客访问: 1723443
  • 博文数量: 171
  • 博客积分: 11553
  • 博客等级: 上将
  • 技术积分: 3986
  • 用 户 组: 普通用户
  • 注册时间: 2006-05-25 20:28
文章分类

全部博文(171)

文章存档

2012年(2)

2011年(70)

2010年(9)

2009年(14)

2008年(76)

分类: C/C++

2008-03-30 00:17:53

using System;

public class Rect
{
    public Rect()
    {
        //

        // TODO: Add constructor logic here

        //

    }
    /*
     * 功能
     * 设置当前矩形的四个坐标值
     * 参数
     * left in 左坐标
     * top in 上坐标
     * right in 右坐标
     * bottom in 底坐标
     */

    public void Set(int left, int top, int right, int bottom)
    {
        this.left = left;
        this.top = top;
        this.right = right;
        this.bottom = bottom;
    }
    /*
     * 功能
     * 矩形相加
     * 参数
     * lhs in 第一个矩形
     * rhs in 第二个矩形
     * 返回值
     * 两个矩形相加后的矩形
     */

    public static Rect operator + ( Rect lhs,Rect rhs)
    {
        Console.WriteLine("operator + be called");
        Rect rt = new Rect();
        rt.top = lhs.top + rhs.top;
        rt.left = lhs.left + rhs.left;
        rt.bottom = lhs.bottom + rhs.bottom;
        rt.right = lhs.right + rhs.right;
        return rt;
    }
    /*
     * 功能
     * 矩形相减
     * 参数
     * lhs in 被减的矩形
     * rhs in 减去的矩形
     * 返回值
     * 被减后的矩形
     */

    public static Rect operator - (Rect lhs, Rect rhs)
    {
        Console.WriteLine("operator - be called");
        Rect rt = new Rect();
        rt.top = lhs.top - rhs.top;
        rt.left = lhs.left - rhs.left;
        rt.bottom = lhs.bottom - rhs.bottom;
        rt.right = lhs.right - rhs.right;
        return rt;
    }
    /*
     * 功能
     * 矩形相加
     * 参数
     * lhs in 第一个矩形
     * rhs in 第二个矩形
     * 返回值
     * 两个矩形相加后的矩形
     */

    public static Rect Add(Rect lhs, Rect rhs)
    {
        Console.WriteLine("Add be called");
        return lhs + rhs;
    }
    /*
     * 功能
     * 比较两个矩形是否相同
     * 参数
     * lhs in 第一个矩形
     * rhs in 第二个矩形
     * 返回值
     * 如果相等,返回true
     * 如中不相等,返回false
     */

    public static bool operator ==(Rect lhs, Rect rhs)
    {
        Console.WriteLine("operator == be called");
        return (lhs.left == rhs.left) && (lhs.top == rhs.top)
        && (lhs.right == rhs.right) && (lhs.bottom == rhs.bottom);
    }

    /*
     * 功能
     * 比较两个矩形是否不同
     * 参数
     * lhs in 第一个矩形
     * rhs in 第二个矩形
     * 返回值
     * 如果相等,返回false
     * 如中不相等,返回true
     */

    public static bool operator !=(Rect lhs, Rect rhs)
    {
        Console.WriteLine("operator != be called");
        return !(lhs == rhs);
    }
    /*
     * 功能
     * 比较两个矩形是否相同
     * 参数
     * lhs in 第一个矩形
     * rhs in 第二个矩形
     * 返回值
     * 如果相等,返回true
     * 如中不相等,返回false
     */

    public static bool Equal(Rect lhs, Rect rhs)
    {
        Console.WriteLine("Equal be called");
        return lhs == rhs;
    }
    //在重载符号时,应用将重载一对(一个用来表示正面操作,而另一个与之相反)

    //在重载符号时,还应该重实现与之对应的一个成员方法,用于应用在不支持符号重载的其它.net语言


    //显示与隐式转化

    /*
     * 功能
     * 只有一个参数的转化函数
     * 参数
     * cord in 指定矩形的四个坐标值
     * 返回值
     * 以坐标值(cord,cord,cord,cord)的一个正方形
     */

    public static implicit operator Rect(int cord)
    {
        Console.WriteLine("operator Rect be called");
        Rect rt = new Rect();
        rt.left = cord;
        rt.top = cord;
        rt.right = cord;
        rt.bottom = cord;
        return rt;
    }
    /*
     * 功能
     * 将Rect转化为一个int类型
     * 参数
     * rt in 一个矩形
     * 返回值
     * 这个矩形的面积
     */

    public static explicit operator int(Rect rt)
    {
        Console.WriteLine("operator int be called");
        return Math.Abs((rt.right - rt.left) * (rt.bottom - rt.top));
    }
    public override string ToString()
    {
        return "(" + left + "," + top + "," + right + "," + bottom + ")";
    }
    //为了方便这里将四个坐标定为了public

    public int left = 0;
    public int top = 0;
    public int right = 0;
    public int bottom = 0;

}

public class CallRect
{
    public static void test()
    {
        Rect rtl = new Rect();
        Rect rtr = new Rect();

        //修改两个矩形的坐标值

        rtl.Set(10, 10, 10, 10);
        rtr.Set(20, 20, 20, 20);
        //测试==和!=符号

        Console.WriteLine("rtl == rtr is {0}", rtl == rtr);
        Console.WriteLine("rtl != rtr is {0}", rtl != rtr);

        //测试+和-符号

        Rect rt = rtl + rtr;
        Console.WriteLine("rt = ({0},{1},{2},{3})", rt.left, rt.top, rt.right, rt.bottom);
        rt = rtl - rtr;
        Console.WriteLine("rt = ({0},{1},{2},{3})", rt.left, rt.top, rt.right, rt.bottom);

        //隐式转化

        PrintRect(100);
       //显示转化

        PrintArea((int)rt);

 
    }
    //隐式转化测试函数

    public static void PrintRect(Rect rt)
    {
        Console.WriteLine(rt.ToString());
    }
    //显示转化测试函数

    public static void PrintArea(int area)
    {
        Console.WriteLine(area);
    }
}


文件:Operator.rar
大小:1KB
下载:下载
阅读(1637) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~