C++设计:如何设置共享一组变量的两个类


这可能是

一个愚蠢的问题,但是对共享一组变量的 2 个类进行编程的最佳方法是什么?

  1. A 类和 B 类都需要访问 int x 和 int y。
  2. 如果类 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';
}

如果您发现自己处于需要这样做的情况,请重新考虑您的设计。

最新更新