下载此文档

运算符重载.docx


文档分类:IT计算机 | 页数:约22页 举报非法文档有奖
1/22
下载提示
  • 1.该资料是网友上传的,本站提供全文预览,预览什么样,下载就什么样。
  • 2.下载该文档所得收入归上传者、原创者。
  • 3.下载的文档,不会出现我们的网址水印。
1/22 下载此文档
文档列表 文档介绍
函数自定义类的赋值运算符重载函数的作用与内置赋值运算符的作用类似, 但是要要注意的是, 它与拷贝构造函数与析构函数一样, 要注意深拷贝浅拷贝的问题, 在没有深拷贝浅拷贝的情况下, 如果没有指定默认的赋值运算符重载函数,那么系统将会自动提供一个赋值运算符重载函数。示例下面是 Vector 的定义——包含成员字段、构造函数和一个 ToString ()重写方法,以便查看 Vector 的内容,最后是运算符重载: namespace { struct Vector { public double x,y,z; public Vector(double x,double y,double z) { = x; = y; = z;} public Vector(Vector rhs) {x= ; y= ; z= ; } public override string ToString() { return "("+x+ ","+y+ ","+z+" )"; } 这里提供了两个构造函数, 通过传递每个元素的值, 或者提供另一个复制其值的 Vector , 来指定矢量的初始值。第二个构造函数带一个 Vector 参数,通常称为复制构造函数,因为它们允许通过复制另一个实例来初始化一个类或结构实例。注意,为了简单起见,把字段设置为 public 。也可以把它们设置为 private ,编写相应的属性来访问它们,这样做不会改变这个程序的功能,只是代码会复杂一些。下面是 Vector 结构的有趣部分——为+ 运算符提供支持的运算符重载: public static Vector operator + (Vector lhs,Vector rhs) { Vector result = new Vector(lhs); += ; += ; += ; return result; }}} 运算符重载的声明方式与方法的声明方式相同,但 operator 关键字告诉编译器,它实际上是一个运算符重载,后面是相关运算符的符号,在本例中就是+ 。返回类型是在使用这个运算符时获得的类型。在本例中, 把两个矢量加起来会得到另一个矢量, 所以返回类型就是 Vector 。对于这个+ 运算符重载, 返回类型与包含类一样,但这种情况并不是必需的。两个参数就是要操作的对象。对于二元运算符(带两个参数),如+ 和-运算符,第一个参数是放在运算符左边的值,第二个参数是放在运算符右边的值。 C# 要求所有的运算符重载都声明为 public 和 static , 这表示它们与它们的类或结构相关联, 而不是与实例相关联, 所以运算符重载的代码体不能访问非静态类成员, 也不能访问 this 标识符; 这是可以的, 因为参数提供了运算符执行任务所需要知道的所有数据。前面介绍了声明运算符+ 的语法,下面看看运算符内部的情况: { Vector result = new Vector(lhs); += ; += ; += ; return result; } 这部分代码与声明方法的代码是完全相同的, 显然, 它返回一个矢量, 其中包含前面定义的 lhs 和 rhs 的和,即把 x 、y 和z 分别相加。简单的代码下面需要编写一些简单的代码,测试 Vector 结构: static void Main() { Vector vect1,vect2,vect3; vect1 = new Vector(,,); vect2 = new Vector(,­­&shy ;– ,– ); vect3 = vect1 + vect2; ("vect1 ="+ ()); ("vect2 ="+ ()); ("vect3 ="+ ()); } 把这些代码保存为 ,编译并运行它,结果如下: Vectors vect1 =( 3,3,1 ) vect2 =(2 ,–4 ,–4) vect3 =(5 ,–1 ,–3) 运算符重载不能用于 Java 下面举一个 TICPP 中的例子……一元的: //: C12: // From

运算符重载 来自淘豆网www.taodocs.com转载请标明出处.

相关文档 更多>>
非法内容举报中心
文档信息
  • 页数22
  • 收藏数0 收藏
  • 顶次数0
  • 上传人yixingmaoj
  • 文件大小0 KB
  • 时间2016-07-13