一个愚蠢的问题,但是对共享一组变量的 2 个类进行编程的最佳方法是什么?
- A 类和 B 类都需要访问 int x 和 int y。
- 如果类 A 更改 x 或 y,则更改应反映在类 B 中
我的想法:类 A 和 B 可以继承类 C(包含变量 x,y( - 但这将为 A,B 创建一个 c 实例。 - 我只需要 x 和 y 的一个实例
也许我需要友元类或静态变量?
首先 - 这取决于。你还没有告诉我们整个故事。但是你已经做了一些假设,我想阻止你做出
。A 和 B 共享一些通用数据的事实并不意味着它们本质上是相同的。一个人可能有一个旅行目的地,一个会议可能有一个场地,但这并不意味着他们需要是同一事物的子类。
因此,很可能您应该使用以下方法:
struct C { int x; int y; };
class A {
C& foo;
int bar;
A(C& some_c) : foo(some_c) { }
// ... etc. ...
};
class B {
C& baz;
int qux;
A(C& some_c) : baz(some_c) { }
// ... etc. ...
};
没有继承,没有友元类,没有静态变量 - 没有这些东西。而且可能是适当的继承;同样,这取决于。
注意:我给出的例子没有解决 A、B 和 C 变量的范围/生命周期的潜在分歧。如果存在这种背离,那么在堆上创建所有这些对象并让 A 和 B 将 std::shared_ptr
保留到 C 可能是有意义的。
使用带有静态变量的基类:
#include <iostream>
struct C
{
static int x;
static int y;
};
struct A : C
{
};
struct B : C
{
};
int C::x = 0;
int C::y = 0;
int main()
{
A a;
a.x = 1;
a.y = 2;
B b;
std::cout << b.x << b.y << 'n';
}
如果您发现自己处于需要这样做的情况,请重新考虑您的设计。