黑马程序员技术交流社区

标题: 什么是运算符重载,什么时候会用到运算符重载? [打印本页]

作者: 杨占伟    时间: 2012-12-3 20:57
标题: 什么是运算符重载,什么时候会用到运算符重载?
本帖最后由 杨占伟 于 2012-12-5 00:18 编辑

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

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

        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);
        }
}

作者: 许王斌    时间: 2012-12-4 14:08
学习ing~
作者: 快乐之恋    时间: 2012-12-4 16:26
运算符本质就是一个类型的方法而已,只是他的方法名是+、-这种符号,而且他的调用比较特殊,直接用就可以,不用.来引用。

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

作者: 杨占伟    时间: 2012-12-5 00:18
谢谢~~~~




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2