假设我有一个类 B,它在构造函数中从另一个类 A 中获取一个值“v”。我如何从类 C 中读取这个值? C 类将按需实例化,但 A 已经创建了 B 并传递了 'v'。 'v' 将在每个实例化中发生变化。我试图在 B 类中使“v”静态化。它会起作用吗?我无法正确实现它。
Class A {
public:
int* v;
B b1;
A(int* var) : v(var), b1(var) {};
}
如何从 C 类访问相同版本的“v”? 我可以根据自己的喜好定义 B 和 C 以实现目标。但我不能为此更改 A。
最佳答案
你需要一个(公共(public))静态成员
class A { //let's stick with your naming convention!
public:
static int a;
}
A::a = 4;
然而,允许人们更改 A::a 意味着您的程序可能最终会依赖于全局未封装状态...这通常是糟糕设计的标志。
如果您的成员是 const
,那么您实际上是在将一个常量与您的类相关联,这还不错。
class A {
public:
static const int a = 4;
}
std::cout << "A:a is always " << A::a << std::endl;
根据更新的问题进行编辑 如果您在构建类方面需要帮助,我建议您使用某种工厂。如果我理解您的要求,您希望能够为每个 A 类和 B 类实例注入(inject)一个值。此值“v”基于 C 类。
所以...
class C {
private:
// up to you where you implement the getUniqueNumberForNow function
// (global free function for example)
static const int v = getUniqueNumberForNow();
public:
static A createA(){
return A(v);
}
static B createB(){
return B(v);
}
}
getUniqueNumberForNow()
函数只是获取您应有的值。然后它将存储在 class C
中,并且可以在创建 A
和\或 B
时使用。现在只需将 A
和 B
的 CTOR 设为私有(private),并将 C
设为两者的 friend
,您将只有创建 A
或 B
的一种方法,它将始终使用正确的值。
有关好友类(class)的信息,请参阅下面评论中 NeilMonday 的链接。
最后一件事是,如果您想为 A
的每个实例更改值,您可以在工厂中执行此操作:
static A createA(){
return A(getUniqueNumberForNow());
}
但是,如果那是真的您想要的,那么就这样做:
class A {
public:
A() : val (getUniqueNumberForNow()), b(B(val)){}
}
关于c++ - 如何在不实例化的情况下访问成员变量,C++,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22301141/