在c#中的向量类上乘以运算符重载

时间:2017-02-22 21:48:07

标签: c# class operator-overloading

我想,这是一个非常基本的问题,但我找不到答案。

程序是出于学习目的,我用这样的乘法运算符定义了一个向量类:

public class vector
{
    private int x;
    private int y;

    public vector(int x,int y)
    {
        this.x = x;
        this.y = y;
    }
    public static vector operator *(vector w1, vector w2)
    {
        return int w1.x*w2.x + w1.y * w2.y;
    }
}

问题在于,visual studio强调了表达式,我应该如何修改“*”运算符的定义以使其有效?

2 个答案:

答案 0 :(得分:1)

您定义了函数以返回vector,但您只返回int

public static vector operator *(vector w1, vector w2)
{
    return int w1.x*w2.x + w1.y * w2.y;
}

应该是

public static int operator *(vector w1, vector w2)
{
    return int (w1.x*w2.x + w1.y * w2.y);
}

或者例如,如果您想为加法运算符返回一个向量,它将如下所示:

public static vector operator +(vector w1, vector w2)
{
    return new vector (w1.x+w2.x, w1.y + w2.y);
}

答案 1 :(得分:0)

您需要返回 vector 的新实例,试试这个:

public class vector
{
    private int x;
    private int y;

    public vector(int x, int y)
    {
        this.x = x;
        this.y = y;
    }

    public static vector operator *(vector w1, vector w2)
    {
        return new vector(w1.x* w2.x, w1.y * w2.y);
    }
}