黑马程序员技术交流社区
标题:
操作符重载,求细说和代码案例有注释。感谢。
[打印本页]
作者:
袁晓俊
时间:
2014-5-11 14:50
标题:
操作符重载,求细说和代码案例有注释。感谢。
本帖最后由 袁晓俊 于 2014-5-11 16:21 编辑
操作符重载,求细说和代码案例有注释。感谢。
作者:
王运波
时间:
2014-5-11 15:51
同求这个疑难杂症.....
作者:
小狸
时间:
2014-5-11 16:09
本帖最后由 小狸 于 2014-5-11 16:11 编辑
C#运算符的重载,依照我的理解,就是在类和结构中重新定义运算符,使得对象和对象之间能够进行我们想要的操作. 一个例子:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace _运算符的重载
{
class Program
{
static void Main(string[] args)
{
Vector v1, v2, v3;
bool b;
v1 = new Vector(3.0, 3.0, 1.0);
v2 = new Vector(2.0, -4.0, -4.0);
v3 = v1 + v2;
b = v1==v2;
Console.WriteLine("V1={0}",v1.ToString());
Console.WriteLine("V2={0}", v2.ToString());
Console.WriteLine("V3={0}", v3.ToString());
Console.WriteLine("v1=v2? {0}", b);
Console.ReadLine();
}
struct Vector
{
public double x, y, z;
public Vector(double x, double y, double z)
{
this.x = x;
this.y = y;
this.z = z;
}
public Vector(Vector rhs)
{
x = rhs.x;
y = rhs.y;
z = rhs.z;
}
public override string ToString()
{
return "("+x+","+y+","+z+")";
}
public static Vector operator +(Vector ihs, Vector rhs)
{
Vector result = new Vector(ihs);
result.x += rhs.x;
result.y += rhs.y;
result.z += rhs.z;
return result;
}
public static bool operator ==(Vector ihs,Vector rhs){
if(ihs.x==rhs.x&&ihs.y==rhs.y&&ihs.z==rhs.z)
{
return true;
}
else
{
return false;
}
}
public static bool operator !=(Vector ihs, Vector rhs) {
return !(ihs==rhs);
}
}
}
}
复制代码
11.jpg
(10.7 KB, 下载次数: 49)
下载附件
2014-5-11 15:59 上传
上面的这个例子定义了一个结构Vector,它的含义是一个三点的坐标矢量.
public static Vector operator + 就是在Vector中对+运算符的重载.当我们调用V1+V2时,operator 关键字会告诉编译器说,这是我定义的操作符.那么编译器就会直接进行三点坐标的相加运算了.
当然重载操作符,还可以用于逻辑运算符.
还是上面的例子,我们想要达到比较三点坐标是否相同,显然判断两个对象的引用是否相同不是我们的目的.
通过
public static bool operator ==()和
public static bool operator !=()来重载,比较他们的三点的坐标.
==()和!=()必须是成对出现的
在C#中重载运算符必须是以public 和 static修饰的.
C#可以进行重载的操作符:
1111.jpg
(155.9 KB, 下载次数: 47)
下载附件
2014-5-11 16:09 上传
像上表说的,这个例子中,重载== 时就必须true false 成对出现
作者:
袁晓俊
时间:
2014-5-11 16:12
3Q,,,,,,,,,,,,,,,,,,,,,,,,,
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2