c++类结构中的功能依赖属性

问题描述 投票:0回答:1

我想做一个类结构,其中一个属性在功能上依赖于其他属性。如何实现这个目标?

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 可以使用)。)

所有的属性都会在classstruct方法中出现很多次,所以我们的目标是要缓存这个值 a+b. 以加法为例,依赖函数可能更复杂。

c++ class struct attributes functional-dependencies
1个回答
5
投票

如果 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;
};

2
投票

你可以做这样的事情。

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响应中那样。

© www.soinside.com 2019 - 2024. All rights reserved.