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

C++ Design: How do I set up two classes that share a set of variables?

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

  1. Class A 和 Class B 都需要访问 int x 和 int y。
  2. 如果class A改变了x或y,这些改变应该反映在class B

我的想法: Class A 和 B 可以继承 Class C(其中包含变量 x,y) - 但是这会为 A、B 创建一个 c 的实例。 - 我只需要一个 x 和 y

实例

也许我需要朋友 class,或者静态变量?

使用带有静态变量的基数 class:

#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';
}

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

首先 - 这取决于。你没有告诉我们整个故事。但是你已经做出了一些假设,我不想让你做出这样的假设。

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. ...
};

没有继承,没有朋友 类,没有静态变量 - none 之类的东西。继承可能是合适的;再次,这取决于。

注意: 我给出的例子没有解决 A、B 和 C 变量在 scope/lifetime 中的潜在差异。如果存在这种分歧,在堆上创建所有这些 objects 并让 A 和 B 将 std::shared_ptr 保存到 C.

可能是有意义的