黑马程序员技术交流社区

标题: 如何实现运算符重载 [打印本页]

作者: dongqinglove    时间: 2014-1-5 20:57
标题: 如何实现运算符重载
本帖最后由 dongqinglove 于 2014-1-6 20:28 编辑

如何实现运算符重载 比如重载:+
作者: 许庭洲    时间: 2014-1-6 08:37
1. + 是属于一元运算符重载类型,类似的还有-, !, ~, ++, --, true, false;
2. C# 中的运算符重载是对重载概念的一个重要补充和发展,它针对对象关系中的多元关系和四则运算、关系运算等常规运算提供了重载支持;
3. 例如下面的例子:
public struct Complex
{
    public int real;
    public int imaginary;
    public Complex(int real, int imaginary)  //constructor
    {
        this.real = real;
        this.imaginary = imaginary;
    }
    // Declare which operator to overload (+),
    // the types that can be added (two Complex objects),
    // and the return type (Complex):
    public static Complex operator +(Complex c1, Complex c2)
    {
        return new Complex(c1.real + c2.real, c1.imaginary + c2.imaginary);
    }
    // Override the ToString() method to display a complex number in the traditional format:
    public override string ToString()
    {
        return (System.String.Format("{0} + {1}i", real, imaginary));
    }
}
class TestComplex
{
    static void Main()
    {
        Complex num1 = new Complex(2, 3);
        Complex num2 = new Complex(3, 4);
        // Add two Complex objects through the overloaded plus operator:
        Complex sum = num1 + num2;
        // Print the numbers and the sum using the overriden ToString method:
        System.Console.WriteLine("First complex number:  {0}", num1);
        System.Console.WriteLine("Second complex number: {0}", num2);
        System.Console.WriteLine("The sum of the two numbers: {0}", sum);
    }
}////////////////////////////////////////////////////////////////////////////////////////////////////////////////
///////////////////////////////////////////////////////////////////////////////////////////////////////////////
First complex number:  2 + 3i
Second complex number: 3 + 4i
The sum of the two numbers: 5 + 7i

//////////////////////////////////////////////////////////////////////////////////////////////////////////////
/////////////////////////////////////////////////////////////////////////////////////////////////////////////

作者: 涵风    时间: 2014-1-6 15:45
C#运算符重载实现复数运算的由来:函数的重载——同名函数,不同的参数(包括参数个数不同和参数个数相同但个数不同)

将其引申,像如下的代码:

int i=5;  
int j=2;  
int sum=i+j;
如果没有自定义的C#运算符重载,像+,-,*,/这样的运算符只能用于预定义的数据类型,编译器认为所有常见的运算符都是用于这些数据类型的。
问题来了,如果我要对两个复数或矩阵进行四则运算,就需要我们自己扩展运算符重载函数了。

C#运算符重载之示例:复数的四则运算

public struct Complex  
{  
    public int real;  
    public int imaginary;  

    public Complex(int real, int imaginary)  
    {  
        this.real = real;  
        this.imaginary = imaginary;  
    }  

    //overload operator(+),added(two Complex objects) and return a Complex type  
    public static Complex operator +(Complex c1, Complex c2)  
    {  
        return new Complex(c1.real + c2.real, c1.imaginary + c2.imaginary);  
    }  

    //overload operator(-)  
    public static Complex operator -(Complex c1, Complex c2)  
    {  
        return new Complex(c1.real - c2.real, c1.imaginary - c2.imaginary);  
    }  
      
    //overload operator(*)  
    public static Complex operator *(Complex c1, Complex c2)  
    {  
        return new Complex(c1.real * c2.real - c1.imaginary * c2.imaginary,
         c1.real * c2.imaginary + c1.imaginary * c2.real);  
    }  

    //overload operator(/)  
    public static Complex operator /(Complex c1, Complex c2)  
    {  
        return new Complex(-c1.real * c2.real +
           c1.imaginary * c2.imaginary, -c1.real * c2.imaginary + c1.imaginary * c2.real);  
    }  

    // Override the ToString method to display an complex number in the suitable format:  
    public override string ToString()  
    {  
        return (String.Format("{0} + {1}i", real, imaginary));  
    }  
}
C#运算符重载之客户端代码:

static void Main(string[] args)  
{  
    Complex num1 = new Complex(2, 3);  
    Complex num2 = new Complex(3, 4);  

    //Add two Complex objects (num1 and num2) through the overloaded plus operator:  
    Complex sum_Add = num1 + num2;  
    Complex sum_Minus = num1 - num2;  
    Complex sum_Product = num1 * num2;  
    Complex sum_Divide = num1 / num2;  

    //Print the numbers and the Result using the overriden ToString method:  
    Console.WriteLine("First complex number:  {0}", num1);  
    Console.WriteLine("Second complex number: {0}", num2);  
    Console.WriteLine("The sum of the two numbers: {0}", sum_Add);  
    Console.WriteLine("The Minus of the two numbers: {0}", sum_Minus);  
    Console.WriteLine("The Product of the two numbers: {0}", sum_Product);  
    Console.WriteLine("The Divide of the two numbers: {0}", sum_Divide);  

    Console.ReadLine();  
}
C#运算符重载实例运行结果:

First complex number:  2 + 3i  
Second complex number: 3 + 4i  
The sum of the two numbers: 5 + 7i  
The Minus of the two numbers: -1 + -1i  
The Product of the two numbers: -6 + 17i  
The Divide of the two numbers: 6 + 1i
作者: dongqinglove    时间: 2014-1-6 20:26
许庭洲 发表于 2014-1-6 08:37
1. + 是属于一元运算符重载类型,类似的还有-, !, ~, ++, --, true, false;
2. C# 中的运算符重载是对重载 ...

谢谢,学习了 不错哦
作者: dongqinglove    时间: 2014-1-6 20:49
涵风 发表于 2014-1-6 15:45
C#运算符重载实现复数运算的由来:函数的重载——同名函数,不同的参数(包括参数个数不同和参数个数相同但 ...

谢谢哥们儿 学习了




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