1

わかりましたので、以下にC ++の構造体があります:

typedef struct tagRECTEx{
 int top;
 int bottom;
 int left;
 int right;
 int width=(this->right-this->left);
 int height;

} RectEx;

今私がやりたいことは、RextEx WindowSize; と宣言するときです。そして、私は WindowSize.left=250 と WindowSize.right=300 を割り当てます。 WindowSize.width がそれを差し引く場所が欲しいので、 cout << "Window Width: " WindowSize.width; を使用します。自動的に左右を差し引いて 50 になります。

私はこれをしたくありません:

WindowSize.width=(WindowSize.right-WindowSize.left);

私はそれを私のためにそれをしたい:

... int width=(this->right-this->left); ...

これが機能する唯一の方法は、代わりにこれを行う場合です。

typedef struct tagRECTEx{
 int top;
 int bottom;
 int left=250;
 int right=300;
 int width=(this->right-this->left);
 int height;

} RectEx;

しかし、それらは常に変化するため、それを行うことはできません。

過去5時間、Googleでオンラインでこれを見つけようとしてきたので、誰か助けてください。

ありがとうございました

4

1 に答える 1

5

widthが常に左右と「同期」していることを確認するには、いくつかの方法があります。

  • 不変にして、コンストラクターでtagRECTExを設定する、またはwidth
  • すべての変数にセッター関数を追加し、またはが変更さwidthれるたびに更新する、またはleftright
  • width次のように、変数をwidth()メンバー関数に置き換えます。

int width() {
    return right-left;
}

通常はより経済的であり、メンテナンス中にバグが発生する可能性が大幅に減少するため、私はこの最後の方法を好みます。

于 2013-09-19T10:19:35.593 に答える