0

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

  1. A 类和 B 类都需要访问 int x 和 int y。
  2. 如果 A 类更改 x 或 y,则更改应反映在 B 类中

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

也许我需要朋友类或静态变量?

4

2 回答 2

3

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

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可能是有意义的。

于 2018-04-06T14:49:22.887 回答
-1

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.

于 2018-04-06T14:28:32.360 回答