A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© dongqinglove 中级黑马   /  2014-1-5 20:57  /  1377 人查看  /  4 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 dongqinglove 于 2014-1-6 20:28 编辑

如何实现运算符重载 比如重载:+

评分

参与人数 2技术分 +2 收起 理由
V_John + 1
茹化肖 + 1

查看全部评分

4 个回复

倒序浏览
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

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

评分

参与人数 1技术分 +1 收起 理由
茹化肖 + 1

查看全部评分

回复 使用道具 举报
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

评分

参与人数 1技术分 +1 收起 理由
茹化肖 + 1

查看全部评分

回复 使用道具 举报
许庭洲 发表于 2014-1-6 08:37
1. + 是属于一元运算符重载类型,类似的还有-, !, ~, ++, --, true, false;
2. C# 中的运算符重载是对重载 ...

谢谢,学习了 不错哦
回复 使用道具 举报
涵风 发表于 2014-1-6 15:45
C#运算符重载实现复数运算的由来:函数的重载——同名函数,不同的参数(包括参数个数不同和参数个数相同但 ...

谢谢哥们儿 学习了

评分

参与人数 1技术分 +1 收起 理由
V_John + 1

查看全部评分

回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马