我想做一个类结构,其中一个属性在功能上依赖于其他属性。如何实现这个目标?
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
. 以加法为例,依赖函数可能更复杂。
如果 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;
};
你可以做这样的事情。
struct Numbers {
Numbers(int a, int b) : a(a), b(b), c(a + b) {}
private:
int a;
int b;
int c; // c == a+b
};
编辑: a
和 b
更新,而要获得这些变量的值,你必须使用get &set方法,就像@cdhowie响应中那样。