c++ - C++类/结构中的函数相关属性

标签 c++ class struct attributes functional-dependencies

我想创建一个类/结构,其中一个属性在功能上依赖于其他属性。如何做到这一点?

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值。以加法为例,依赖函数可能更复杂。

最佳答案

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

关于c++ - C++类/结构中的函数相关属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61973725/

相关文章:

c++ - 大多数基本类型的高效二进制序列化

c++ - 如何将起始地址分配给 map<pair<long long int,long long int>,long long int > 的迭代器

c++ - C++错误 “_main”,引用自:“Xcode

C++简单的继承问题

arrays - 我不明白为什么我的代码适用于我的结构数组,但不适用于包含此结构数组的结构?

google-app-engine - golang 数据存储结构 : keeping field unique and required

c++ - &a[n] 是否有效,其中 n 是数组的大小?

c++ - 错误:没有匹配函数来调用...(std::string&)

java - 将父类(super class)转换为子类

json - 当它是一个数组并且第一项与其余项的类型不同时,如何在 Swift 中解码 JSON?