0

今日、学校でC ++でメソッド/関数を記述する4つの方法を学びましたが、それぞれの概念とそれらの違いを理解しているかどうかはわかりません。それらはすべて同じことをしますか?最初のコードはクラス宣言であり、2番目のコードはクラス外の実装です。

a)

1) Vector Addition(Vector a);

2) Vector Vector::Addition(Vector a)
{
    Vector temp = *this;
    temp.x+=a.x;
    temp.y+=a.y;
    return temp;
}

b)

1)Vector ConcreteInstanceAddition(Vector a, Vector b);

2) Vector Vector::ConcreteInstanceAddition(Vector a, Vector b)
{
    Vector temp=*this;
    temp.x=a.x+b.x;
    temp.y=a.y+b.y;
    return temp;
}

c)

1) friend Vector NonConcreteInstanceAddition(Vector a, Vector b);

2) Vector NonConcreteInstanceAddition(Vector a, Vector b)
{
    Vector temp(0,0);
    temp.x=a.x+b.x;
    temp.y=a.y+b.y;
    return temp;
}

d)

1) static Vector NonConcreteInstanceAdditionStatic(Vector a, Vector b);

2) Vector Vector::NonConcreteInstanceAdditionStatic(Vector a, Vector b)
{
    Vector temp(0,0);
    temp.x=a.x+b.x;
    temp.y=a.y+b.y;
    return temp;
}

そして、これはメイン関数での実装です。

Vector a(0,0),b(0,0),c(0,0);

c=a.Addition(b);
//or
c.ConcreteInstanceAddition(a,b);
//or
c=NonConcreteInstanceAddition(a,b);
//or
c=Vector::NonConcreteInstanceAdditionStatic(a,b);
4

1 に答える 1

1

もう少し忘れました:(
自立、パラメータで戻ります)

void Addition (const Vector& a, const Vector& b, Vector & result)
{
   result.x = a.x + b.x;
   result.y = a.y + b.y;
   return;
}

main関数内 :

Addition(a, b, c);

const使用および参照による受け渡しによるバリエーションもあります。

回答:
a)メンバー関数。なしでクラス変数を使用できますthis->
「ホスティング」インスタンスのメンバー変数を変更します。

b)メンバー機能; インスタンス変数は変更しません。

c)クラス内のメソッドと変数にアクセスする権限を持つ独立した関数。

d)静的メンバー関数。オブジェクトインスタンスなしでアクセスできますが、クラス変数にはアクセスできません。(クラス変数にはインスタンスが必要です。)

operator+=()編集1:とを実装することでさらに2つ追加することもできますoperator+()

編集2:静的メンバー関数の使用

c = Vector::NonConcreteInstanceAdditionStatic(a,b);

静的メンバー関数は、クラス内にあり、アクセスするにはスコープ解決演算子、を使用する必要があることを除いて、独立関数を使用するのと似てい::ます。

于 2013-03-17T17:49:07.823 に答える