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 个小时我一直在尝试在谷歌上找到这个。

谢谢

4

1 回答 1

5

有几种方法可以确保width始终与左右“同步”:

  • 使tagRECTEx不可变,并width在构造函数中设置,或
  • 为所有变量添加 setter 函数,并在width每次leftright更改时更新,或者
  • 用成员函数替换width变量,如下所示:width()

int width() {
    return right-left;
}

我更喜欢最后一种方法,因为它通常更经济,并且因为它大大降低了在维护期间引入错误的可能性。

于 2013-09-19T10:19:35.593 回答