码迷,mamicode.com
首页 > Windows程序 > 详细

4.2 C#-----------------------------操作符的重载------------------------------------------

时间:2018-04-05 01:14:15      阅读:254      评论:0      收藏:0      [点我收藏+]

标签:return   重载操作符   包括   opera   必须   gpo   系统   编程   new   

                                  操作符一般用于系统预定义的数据类型。如果在类中定义操作符,就称为操作符重载。

操作符重载包括一元操作符重载和二元操作符重载,以及用户定义的数据类型转换。

  如果有一个复数Complex 类对一元操作符“++”重载,可以写成:

1 public static Complex operator ++(Complex a)
2 
3 {
4 
5 .......................................................
6 
7 }

 

如果是对二元操作符“+”重载可以写成:

 1 public static Complex operator +(Complex a,Complex b) 2 { 3 ............... 4 } 

 一元操作符有一个参数,二元操作符有两个参数,重载操作符的开始必须以public static 修饰。可以重载的操作符包括:

  一元操作符:+、-、!、~、++、--、true、false。

  二元操作符:+、-、*、/、 %、 &、 |、^、<<、>>、==、!=、 >、<、 >=、<=。

下面的操作符要求同时重载、不能只重载其中的一个:

  一元操作符:true和false。

  二元操作符:==和!=    >和<   >=和<=。

 操作符的作用:

  操作符重载给类的一些操作带来一些方便,俩个复数的实部相加运算可以写成:

1 public static double Add(Complex a,Complex b)
2 
3 {
4 
5 return a.r+b.r
6 
7 }

这样的写发不够简洁,并且类的成员修饰符不为public时就不能这样直接操作了。

  4.7操作符重载的实现-------------------------------------->>>>>>>>>>>>>>>>>>

 

先新建一个类:Complex.cs

 1 using System;
 2 using System.Collections.Generic;
 3 using System.Linq;
 4 using System.Text;
 5 
 6 namespace Application27
 7 {
 8     class Complex
 9     {
10         double r, v;
11         public Complex(double r, double v)
12         {
13             this.r = r;
14             this.v = v;
15 
16         }
17         //二元操作符“+”重载
18         public static Complex operator +(Complex a, Complex b) { return new Complex(a.r + b.r, a.v + b.v); }
19 
20         //一元操作符“-”重载
21         public static Complex operator -(Complex a)
22         {
23             return new Complex(-a.r, -a.v);
24 
25         }
26 
27         //一元操作符“++”重载
28         public static Complex operator ++(Complex a)
29         {
30             double r = a.r + 1;
31             double v = a.v + 1;
32             return new Complex(r,v);
33 
34         }
35         public void Print()
36         {
37             Console.Write(r+" + " +v+ "i\n");
38         }
39 
40     }
41 }

然后在主程序中实现:Test.cs

 1 using System;
 2 using System.Collections.Generic;
 3 using System.Linq;
 4 using System.Text;
 5 
 6 namespace Application27
 7 {
 8     class Test
 9     {
10         public static void Main()
11         {
12             Complex a = new Complex(3, 4);
13             Complex b = new Complex(5,6);
14             
15             Complex c = -a;
16             c.Print();
17             
18             Complex d = a + b;
19             d.Print();
20             a.Print();
21 
22             Complex e = a++;  //先赋值后++
23             a.Print();
24             e.Print();
25 
26             Complex f = ++a;   //先++后赋值
27             a.Print();
28             f.Print();
29         }
30     }
31 }

技术分享图片

  

 在操作符重载中,返回值往往需要新建(new)一个新建的Complex对象。

  另外一个种操作符重载类型是用户定义的数据类型转换,它实现不同类型之间的转换,包括显示转换和隐式转换两种方式。

  编程中往往需要将一个类型转换成另外一个类型。例如将Int转换成double,  他们是系统已经预定义的类型,编译器知道如何来执行他们的转换,具体内容以后在说吧。

  如果他们中间有的类型不是编译器预定义的类型,编译器将不知道如何执行转换,解决的方法是使用用户定义的数据类型转换。

    如果转换过程不会因丢失数据而出现异常,就采用隐式转换。如果转换过程有可能丢失数据,就要采用显示转换。

  隐式类型转换的写法如下:

 

 

  

4.2 C#-----------------------------操作符的重载------------------------------------------

标签:return   重载操作符   包括   opera   必须   gpo   系统   编程   new   

原文地址:https://www.cnblogs.com/CCMMBN/p/8719703.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!