Fra*_*Vel 1 c++ attributes struct class 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!
Run Code Online (Sandbox Code Playgroud)
在我的用例a, b, c中,如果这很重要(因此const int可以使用),则是恒定的。
所有属性都会在 class/struct 方法中多次出现,因此目标是缓存 value a+b。以加法为例,依赖函数可能更复杂。
如果a和b是可变的,那么你不能强制c保持同步;所有三个都必须是 const 才能强制执行此不变量。
最简单的方法是创建c一个函数:
struct Numbers {
int a;
int b;
int c() const { return a + b; }
}
Run Code Online (Sandbox Code Playgroud)
如果您希望在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;
};
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
61 次 |
| 最近记录: |