这可能是一个愚蠢的问题,但是对共享一组变量的 2 个类进行编程的最佳方法是什么?
- A 类和 B 类都需要访问 int x 和 int y。
- 如果 A 类更改 x 或 y,则更改应反映在 B 类中
我的想法:A 类和 B 类可以继承 C 类(其中包含变量 x,y) - 但这会为 A,B 创建一个 c 的实例。- 我只需要 x 和 y 的一个实例
也许我需要朋友类或静态变量?
这可能是一个愚蠢的问题,但是对共享一组变量的 2 个类进行编程的最佳方法是什么?
我的想法: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 变量的范围/寿命方面的潜在差异。std::shared_ptr
如果存在这样的分歧,那么在堆上创建所有这些对象并让 A 和 B 持有C可能是有意义的。
Use a base class with static variables:
#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';
}
If you find yourself in a situation where you think you need to do this, please reconsider your design.