C++ 中的功能相关属性 class/struct

Functional dependent attribute in c++ class/struct

我想创建一个 class/struct,其中一个属性在功能上依赖于其他属性。如何实现?

struct Numbers {
  int a;
  int b;
  int c; // c == a+b
}


Numbers n1 {1, 2, 3}; // Ok.
Numbers n2 {1, 2, 4}; // Error! 

在我的用例中,a, b, c 是常数,如果这很重要(因此可以使用 const int)。

所有属性都会在class/struct方法中出现多次,所以目标是缓存值a+b。以加法为例,依赖函数可能更复杂

你可以这样做:

struct Numbers {
    Numbers(int a, int b) : a(a), b(b), c(a + b) {}

private:
    int a;
    int b;
    int c; // c == a+b
};

编辑:
要保持 ab 的值更新,并获取这些变量的值,您必须使用 get & set 方法,如@cdhowie response.

如果 ab 是可变的,那么您不能强制 c 保持同步;这三个都必须是 const 才能强制执行此不变量。

最简单的方法是使 c 成为一个函数:

struct Numbers {
  int a;
  int b;
  int c() const { return a + b; }
}

如果您希望 c 的值被缓存而不是在需要时计算,那么您还需要将 ab 隐藏在访问器后面,以便您可以更新 c 更新时。

class Numbers {
public:
  Numbers(int a, int b) : ma{a}, mb{b} { updateC(); }

  int a() const { return ma; }
  int b() const { return mb; }
  int c() const { return mc; }

  void a(int v) { ma = v; updateC(); }
  void b(int v) { mb = v; updateC(); }
  // No setter for c

private:
  void updateC() { mc = ma + mb; }

  int ma;
  int mb;
  int mc;
};