A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

本帖最后由 杨占伟 于 2012-12-5 00:18 编辑

运算术是怎么重载的,运算术的工作方式是怎样的?

评分

参与人数 1技术分 +1 收起 理由
郑文 + 1

查看全部评分

4 个回复

倒序浏览
为了表达上的方便, 人们希望可以重新给已定义的操作符赋予新的含义, 在特定的类的实例上进行新的解释. 这就需要通过操作符重载来解决
操作符重载总是在类中进行声明 , 并且通过调用类的成员方法来实现
一元操作符重载
顾名思义, 一元操作符重载时操作符  只作用与一个对象 , 此时参数表为空, 当前对象为操作符的单操作数.

        using System;

class Player
{
        public int neili;
        public int tili;
        public int jingyan;
        public int fullNeili;
        public int fullTili;
       
        public Player ()
        {
                neili=10;
                tili=50;
                jingyan=0;
                fullNeili=50;
                fullTili=50;
        }
        public static Player operator ++ (Player p)
        {
                p.neili+=50;
                p.tili+=100;
                p.fullNeili=p.neili;
                p.fullTili=p.tili;
                return p;
        }
        public void Show()
        {
                Console.WriteLine("Tili :{0}",tili);
                Console.WriteLine("Neili :{0}", neili);
                Console.WriteLine("Jingyan :{0}",jingyan);
                Console.WriteLine("FullNeili :{0}",fullNeili);
                Console.WriteLine("FullTili :{0}",fullTili);
        }
}

class Test
{

        public static void Main()
        {
                Player p=new Player();
                p.Show();
                Console.WriteLine("升级后:");
                p++;
                p.Show();
                Console.ReadKey();
        }
}

二元操作符重载
大多数情况下我们使用二元操作符重载. 这是参数表中有一参数, 当前对象作为该操作符的左操作数,  参数作为操作符的右操作数.

using System;

class DKR
{
        public int x,y,z;

        public DKR(int vx, int vy, int vz)
        {
                this.x=vx;
                this.y=vy;
                this.z=vz;
        }

        public static DKR operator + (DKR d1, DKR d2)
        {
                DKR d3 =new DKR(0,0,0);
                d3.x=d1.x+d2.x;
                d3.y=d1.y+d2.y;
                d3.z=d1.z+d2.z;
                return d3;
        }
}

class Test
{
        public static void Main()
        {
                DKR d1=new DKR(3,2,1);
                DKR d2=new DKR(0,6,5);
                DKR d3=d1+d2;
                Console.WriteLine(" The 3d location of d3 is:{0},{1},{2}",d3.x,d3.y,d3.z);
        }
}

评分

参与人数 1技术分 +1 收起 理由
郑文 + 1

查看全部评分

回复 使用道具 举报
学习ing~
回复 使用道具 举报
运算符本质就是一个类型的方法而已,只是他的方法名是+、-这种符号,而且他的调用比较特殊,直接用就可以,不用.来引用。

运算符重载就和普通方法的重载一样,就是你自己写一个类的方法,并可以用+、-符号来调用而已
重载是面向对象中的一个重要概念,它是对象多态性的一种不完全体现
运算符重载是对重载概念的一个重要补充和发展,它针对对象关系中的多元关系和四则运算、关系运算等常规运算提供了重载支持,开发人员可以利用运算符重载优化利用到这些关系的实现代码中,以提高效率

评分

参与人数 1技术分 +1 收起 理由
古银平 + 1 神马都是浮云

查看全部评分

回复 使用道具 举报
谢谢~~~~
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马