黑马程序员技术交流社区
标题:
什么是运算符重载,什么时候会用到运算符重载?
[打印本页]
作者:
杨占伟
时间:
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