2017-03-26 5 views
0

私はコンストラクタを持つクラスcharacterDataを持っている:オブジェクトをデフォルト値にリセットします。リコールコンストラクタ?

class characterData() { 
    private: 
     int position[2]; 
     vector<vector<int> > pixelData; 
     int num; 
    public: 
     characterData() { 
      num = -1; 
     } 
     void setValues(int p[2], vector<vector<int> > v, int n) { 
      position[0] = p[0]; 
      position[1] = p[1]; 
      pixelData = v; 
      num = n; // if setValues() is called, n will always > -1 
     } 
}; 

私は私のコードでcharacterData「空」を持つことができますので、私はそれをこのように行います。私の思考プロセスは、characterDataオブジェクトでnum == -1,setValues()が呼び出されていない場合です。

後で私のコードでcharacterData kしか初期化されていません。setValues()が呼び出されていないので、k.num == -1です。

最終的にkの値を変更しますが、元の形式に「リセット」します。

characterData k; 
// some assignments happen, k = something else 
k = new characterData(); // reset k 

上記は機能しません。 k.num == -1のようにkをリセットする必要があります。 numを変更することができるメンバーセッター/ミューテーター関数はありません。私の考えはコンストラクターを呼び出すことでしたが、これは機能しません。

kを「空」状態にリセットするにはどうすればよいですか?

+0

'setValues'を' n == -1'で呼び出すとどうなりますか? –

+0

@ M.M 'n'は' list'のサイズから導かれます。質問に記されているように、「n」は決して0未満ではありません。 – gator

答えて

5

ただ、再びデフォルトのコンストラクタを使用します。

characterData c; 
    c.setvalues(...); 
    c = characterData(); 

私は、これは特に素晴らしいデザインで言わないだろうが。

+0

私はそれが良いデザインではないことに同意しますが、私は改善すべきバックボーンを作り出しています。私は空の 'characterData'を作成し、何かを空の' characterData'にリセットする方法が必要です。 – gator

4

clear機能を追加しますか?

void clear() { 
     num = -1; 
    } 
関連する問題