我想创建一个类/结构,其中一个属性在功能上依赖于其他属性。如何做到这一点?
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
值。以加法为例,依赖函数可能更复杂。
最佳答案
如果a
和b
是可变的,那么您不能强制c
保持同步;这三个都必须是const才能强制您执行此不变式。
最简单的方法是使c
为函数:
struct Numbers {
int a;
int b;
int c() const { return a + b; }
}
如果要缓存
c
的值而不是在需要时计算它的值,则还需要将a
和b
隐藏在访问器后面,以便可以在更新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/