2

私は C++ で Comp Sci モジュールの割り当てを行うのに忙しく、質問の 1 つに少し混乱しています。オーバーロードされたインクリメント演算子の 3 つの実装を提供するよう求めています。

  1. 前の質問でコーディングされたメンバ関数 Adjust() を使用します。
  2. オーバーロードされた演算子をフレンド関数として実装します。
  3. オーバーロードされた演算子をメンバー関数として実装します。

これで、演算子のオーバーロードの概念が理解できました。大丈夫だと思います。しかし、既存のメンバー関数 Adjust() を使用する最初のものについては、実際にはよくわかりません。確かに、オーバーロードして別の関数を呼び出しているだけの場合、それは友人か、別のメンバー関数を呼び出すメンバー関数のいずれかになります。とにかく、どんな助けでも大歓迎です。以下は、参照用に2番と3番のコードです。

//Friend Function
friend Chequebook operator ++(const Chequebook &c); //Declaration in class.
Chequebook operator++(const Chequebook &c) //Function
{
    return Chequebook(c.Balance+100);
}

//Member Function
Chequebook operator++(); //Declaration in class.
Chequebook Chequebook::operator++() //Function.
{
    return Chequebook(Balance+100);
}

コードのエラーについて申し訳ありません。これは、プレインクリメント演算子のオーバーロードであると想定されています。

4

3 に答える 3

2

最初の質問は、「以前にコーディングされたメンバ関数 Adjust に関して operator++ を実装する」と解釈します。

Adjust は public 関数である可能性が高いため、operator++ のメンバー実装は必要ありません。次のように実装します

Chequebook& operator++(Chequebook& i_lhs)
  {
  i_lhs.Adjust(1); // Or whatever Adjust actually takes as parameters.
  return i_lhs;
  }
于 2012-09-07T13:57:36.250 に答える
2

あなたはおそらくインクリメント演算子が何をするかを誤解しているか、宿題の全文を投稿していません.

オブジェクトを変更します。会員でも非会員でもかまいません。接頭辞と接尾辞にすることができます。プレフィックス (++x) インクリメントが通常どのように実装されるかの例を次に示します。

class X 
{
  int i;
public:

  // member prefix ++x
  X& operator++() { ++i; return *this;}
};

class Y 
{ 
  int i;
public:
  void adjust() {++i;}
};

// non-member prefix ++y
Y& operator++(Y& y) { y.adjust(); return y;}

class Z 
{ 
  int i;
public:
  // friend prefix ++z
  friend Z& operator++(Z& z) { z.i++; return z;}
};

後置インクリメント (x++) は異なります。追加の int パラメータが必要です。

于 2012-09-07T14:00:02.567 に答える
0

++実際にはオブジェクトをまったく変更しておらず、これはpre または postのセマンティクスではないため、#2 の試みは明らかに壊れています。さらに、残高から減算してインクリメントしているように見えますか?

于 2012-09-07T13:59:01.520 に答える