C++ 中的功能相关属性 class/struct
Functional dependent attribute in c++ class/struct
我想创建一个 class/struct,其中一个属性在功能上依赖于其他属性。如何实现?
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
。以加法为例,依赖函数可能更复杂
你可以这样做:
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 response.
如果 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;
};
我想创建一个 class/struct,其中一个属性在功能上依赖于其他属性。如何实现?
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
。以加法为例,依赖函数可能更复杂
你可以这样做:
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 response.
如果 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;
};