1

クラス+クラスを操作できます(たとえば、日付+日付を実行できます)が、クラス+クラス+クラスを実行する方法を誰か説明できますか? C++ では、2 つのパラメーターを持つ演算子を定義できません。

4

5 に答える 5

8

これは、一般にそのような演算子が存在しないためです。
a + b + cです(a + b) + c。最初a + bに、次にその結果が に追加されcます。

編集:

問題のオブジェクトが非常に大きいため、次のような式で一時オブジェクトを作成するとa + b + cコストがかかりすぎる場合は、テンプレート式をググることができます。基本的な考え方はoperator+、完全な式の一部として、後で評価できる式ノードを返す以外は何もしないということです。

于 2013-08-13T15:02:54.043 に答える
1

それらをクラスの友達にすることで、それらが二項演算子であることを確認し、次のように個別に定義します。

class someclass
{
     int a;
public:
     someclass();
     ...
     friend someclass operator+(const someclass & lhs, const someclass & rhs);
};

someclass operator+(const someclass &lhs, const someclass &rhs)
{
     someclass a = lhs;
     a.a = a.a + rhs.a;
     return a;
}

もちろん、コピー コンストラクター (someclass(const someclass & old);) とクラスの他の関数を定義する必要がありますが、この方法は私にとって常に機能しており、大学で教えられた方法でした。

于 2013-08-13T15:03:50.077 に答える
0

http://www.cs.rit.edu/~mjh/docs/c++-faq/operator-overloading.htmlを読むことをお勧めします

私の理解では、ここで 2 つのパラメーターは必要ありません。オーバーロードは、操作の結果であるオブジェクトを返す必要があります。この場合、例のクラス + クラス + クラスは実際にはクラス + (クラス + クラス) として記述できるため、(クラス + クラス) が最初に処理され、その結果が 3 番目のクラスに追加されます。

于 2013-08-13T15:06:16.663 に答える
0

2 つのパラメーターで算術演算子を使用できます。例えば:

//References are used here as arguments.
Cents operator+(const Cents &c1, const Cents &c2)
{
    // use the Cents constructor and operator+(int, int)
    return Cents(c1.m_nCents + c2.m_nCents);
}

(出典: http://www.learncpp.com/cpp-tutorial/92-overloading-the-arithmetic-operators/ )

注:クラスのプライベートメンバーを使用する必要がある場合は、クラス定義で「関数」演算子をフレンドとして宣言する必要があります。

次に、引数として指定されたものと同じクラス型 (ここではオブジェクトまたはそれらの参照) を返す場合、各 operator+ 呼び出しが 2 つの引数の間にあり、結果が追加されると仮定して、class + class + class... を実行できます。 operator+「関数」などを再度呼び出す3番目のものまで。

于 2013-08-13T15:06:57.467 に答える
0

これには 2 つの方法があります。演算子の通常の方法は、通常の 2 つのオペランド演算子を作成し、呼び出しを連鎖させることです。たとえばa + b + c + d=> operator+(operator+(operator+(a + b), c), d)

または、名前を使用してその機能を正確に説明する、マルチパラメーター バージョンを提供する独自の名前付き関数またはメンバーを作成します。

于 2013-08-13T15:04:55.933 に答える