C++ 设计:如何设置共享一组变量的两个 类?
C++ Design: How do I set up two classes that share a set of variables?
这可能是一个愚蠢的问题,但是对共享一组变量的 2 classes 进行编程的最佳方法是什么?
- Class A 和 Class B 都需要访问 int x 和 int y。
- 如果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.
可能是有意义的
这可能是一个愚蠢的问题,但是对共享一组变量的 2 classes 进行编程的最佳方法是什么?
- Class A 和 Class B 都需要访问 int x 和 int y。
- 如果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.