2017-05-05 4 views
0
Vec2& operator+=(Vec2 const& v); 

コードの特定の断片を理解できません:これは関数なのでしょうか、それとも単なる行ですか?これらの線のそれぞれのクラスの関数を作成することになっ

Vec2 operator+(Vec2 const& u , Vec2 const& v); 

イム。さらに多くのことがありますが、誰かが私のことを私に説明することができれば、私は自分自身で残りをすることができると確信しています。

私のアイデアは何ですか? Vec2はおそらくこのクラスのオブジェクトであることを意味する私のクラスの名前です。しかし同時に、これは「+ =」それは、これはあなたが基本的にはこれを行うラインである私に示してありますので、このdoesntのは、何の意味も持た:

Vec2& operator = Vec2& operator + Vec2 const& v 

しかし、私はこれはおそらく間違っていると思います。私の次の推測では、これは{これではなくボディを挿入する必要がある関数です。

2番目のものは、実際の関数のように見えますが、演算子の後にプラスがあるのはなぜですか。これは、これが関数に名前を付ける特別な方法であり、実際には何も意味しないことを意味しますか?

私は誰かがこれについて何か私に説明してくれることを願っています。/

+0

あなたはそれらになっているものを知っていますか? –

+1

あなたはオペレータとは何を意味し、そのオーバーロードは何を意味していますか? –

+0

あなたは[operator-overloading](/ questions/4421706/operator-overloading) – Jarod42

答えて

0

これらは、このクラスの可能な演算子を宣言するために使用されるクラスVec2の実際の関数宣言です(演算子のオーバーロードと呼ばれます)。それらを定義すると、組み込み型の場合と同様に、クラスに++=演算子を使用できます。

Vec2 a, b; // initialize somehow 
Vec2 x = a + b; 
x += b; 

ほとんどすべての演算子に基本的にオーバーロードすることができます。詳細は http://en.cppreference.com/w/cpp/language/operators

2

ファンクション宣言です。これらの定義は、定義を実装することです。

  • Vec2はクラスタイプです。
  • operator+およびoperator+=は、operator overloadsである。

演算子のオーバーロードは、その中で、彼らはあなたがvec_a += vec_b;を入力できるようにすると+=であり、コンパイラはoperator+=への呼び出しでこれを置き換え、syntactic sugarです。

Vec2 vec_a; 
Vec2 vec_b; 
vec_a += vec_b; // the compiler calls vec_a.operator+=(vec_b) 

あなたはあなたの関数で何かを行うことができますが、慣習(と少なくとも驚きの原則は)vec_bvec_aの終わりに追加であることの内容で+=結果が決まります。

Vec2 vec_a; 
Vec2 vec_b; 
vec_a += vec_b; // vec_a now contains its contents *and* vec_b's contents 

あなたの仕事は、この期待を達成するコードを提供することです。つまり、式の右辺の内容(私の例ではvec_b)が式の左辺の内容の末尾にを追加した(私の例ではvec_a)になるようにコードを書く必要があります。 。

例として、のはVec2は、以下のデータメンバを持っているとしましょう:

int* data;  // a pointer to array of ints, "capacity" long 
int capacity; // the length of the array of ints 
int size;  // the number of ints stored in data 

あなたは、次のようなものとして定義を提供する:

Vec2& Vec2::operator+=(Vec2 const& v) 
{ 
    int required_capacity = size + v.size; 
    if (required_capacity > capacity) 
    { 
     // create a temp array required_capacity long 
     // copy contents of data into temp array 
     // assign data so it points to temp 
     // assign capacity to required_capacity 
    } 
    // copy v.size elements from v.data to data[size] 
    // increment size by v.size 
    return *this; 
} 

私はあなたに残して実際の実装練習として

0

これは、オペレータのための関数の定義です。 C++はあなたの型を知らないし、数学演算子を使いたいと思っているなら、あなたの型をどうするべきかも知らない。

このライン:あなたは

Vec2 v = yourVector + yourVector2 

whitoutエラーを使用できるように

Vec2 operator+(Vec2 const& u , Vec2 const& v); 

は、あなたの 'VEC2' タイプのために、 '+' 数学的な存在であることを宣言します。 また、見てくださいhere

+0

を確認し、 "u"は何をすると思われますか? – neo1t7

+0

uは最初のパラメータの名前(数式方程式の左辺)であり、vは数式方程式の右辺です。 –

関連する問題