2017-02-22 1 views
0

Ich denke, es ist ein ziemlich grundlegendes Problem, aber ich konnte keine Antwort finden.Multiplizieren Operator überladen auf Vektor-Klasse in C#

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; 
    } 
} 

Das Problem ist, dass Visual Studio den Ausdruck im Gegenzug unterstreicht, wie soll ich die Definition ändern von:

Programm ist für das Lernen Zweck gemacht, hatte ich eine Vektor-Klasse mit Multiplikationsoperator wie folgt definiert "*" Operator, damit es funktioniert?

+1

@ThomasD. Sie können * absolut * den binären '*' Operator in C# überladen (Beachten Sie, dass Sie keine Operatoren überschreiben, Sie überladen sie.) Sie können den * unary * '*' Operator nicht überladen, aber das wird hier nicht überladen . – Servy

+0

@Servy du hast absolut recht. Nett, ich habe heute etwas gelernt. Danke, dass du das unterstrichen hast! –

+0

Ich denke, das wirkliche Problem ist, dass die Multiplikation das Vektorklassenobjekt in eine Ganzzahl umwandelt, es ist möglich, den Operator "*" zu überladen, ich kann einfach keinen Weg finden, ein int zurückzugeben und das ist es, womit ich Hilfe brauche. –

Antwort

0

Sie benötigen eine neue Instanz von Vektor zurückzukehren, versuchen Sie dies:

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); 
    } 
} 
+0

Das ist das Problem, Sie erhalten keinen Vektor, wenn Sie die Skalarmultiplikation von 2 Vektoren bekommen wollen, nur einen int-Wert (real im Allgemeinen), wird es das gleiche Problem geben, wenn ich die Bauchmuskeln bekommen möchte der komplexen Zahl. Es ist leicht in Python machbar, wie folgt: def __mul __ (selbst, Sekunde): return self.x * second.x + self.y * second.y –

+1

@RafalKonklewski Ich sehe. Überprüfen Sie Xanders Antwort auf das Erhalten einer Ganzzahl. – Eric

1

Sie definiert Ihre Funktion eine vector zurückzukehren, jedoch sind Sie nur eine int zurück.

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

sollte

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

Oder zum Beispiel, wenn Sie einen Vektor für den Additions-Operator zurückkehren wollen, dass aussehen würde:

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