2017-03-28 7 views
-4

X、Y、Z座標を使用して2つのベクトルa、bを追加するコードを作成するにはどうすればよいですか? 以下のコードは、私が正確に叩かれた場所を示しています。クラスのインデックスを使用していますか?

 public Vector(float _x, float _y, float _z) 
    { 
     float X, Y, Z; 
     X = _x; 
     Y = _y; 
     Z = _z; 
     Vector _vector = new Vector(X, Y, Z); 
    } 

    public static Vector operator +(Vector _a, Vector _b) 
    { 
     return new Vector(); //_a.X + _b.X , _a.Y + _b.Y, _a.Z + _b.Z 
    } 
+1

スクリーンショットを投稿しないでください。ここにコードを貼り付けてください。 –

+0

コピー貼り付けされたコードは、写真よりもあなたの問題を説明します –

+8

このコードでStackOverflow例外が発生します - 新しいベクターを作成している間に新しいベクターを作成していますが、新しいベクターを作成中です.. –

答えて

6

受信パラメータからプロパティを作成します。次に、あなたのクラスの任意の場所でそれらを使用することができます。

public class Vector 
{ 
    public float X { get; set; } 
    public float Y { get; set; } 
    public float Z { get; set; } 

    public Vector(float _x, float _y, float _z) 
    { 
     X = _x; 
     Y = _y; 
     Z = _z; 
    } 

    public static Vector operator +(Vector _a, Vector _b) 
    { 
     return new Vector(_a.X + _b.X, _a.Y + _b.Y, _a.Z + _b.Z); 
    } 
} 
+0

それはクラスではなく、クラス内で構造体にあります。 –

+5

あなたのタイトルはそれがクラスであると言います...しかし、コードは構造体のためにも機能します。 –

2
public struct Vector 
{ 
    public float X { get; } 
    public float Y { get; } 
    public float Z { get; } 

    public Vector(float x, float y, float z) 
    { 
     X = x; 
     Y = y; 
     Z = z; 
    } 

    public static Vector operator +(Vector a, Vector b) 
    { 
     return new Vector(a.X + b.X , a.Y + b.Y, a.Z + b.Z); 
    } 
} 

注:

  • を使用すると、ローカル変数やクラスフィールド/プロパティの違いを理解していないように思えます。メソッドやコンストラクタ内で変数を宣言すると、それらの変数とその値はメソッド呼び出しの後になくなります。クラス/構造体の変数を宣言すると、それらの値はオブジェクトの存続期間中に使用可能になります。
  • あなたはコンストラクタの目的を理解していないようです。これは、型の新しいインスタンスを作成するためではなく、既に作成されたインスタンスを初期化するためのものです。新しいVectorインスタンスの値を初期化するためにコンストラクタが呼び出されるため、現在のコードはStackOverflow例外で失敗します。コンストラクタで新しいVectorインスタンスを作成すると、その新しいインスタンスを初期化するコンストラクタが呼び出されます。そして例外的にそうする。
  • 可変またはパラメータ名に奇妙なアンダースコアを使用しないでください。
関連する問題