Com*_*guy 1 c++ inheritance constructor class static-members
假设我有一个类 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) {};
}
Run Code Online (Sandbox Code Playgroud)
如何从 C 类访问相同版本的“v”?我可以定义 B 和 C,但是我喜欢以实现目标。但我不能为此目的更改 A。
您需要一个(公共)静态成员
class A { //let's stick with your naming convention!
public:
static int a;
}
A::a = 4;
Run Code Online (Sandbox Code Playgroud)
但是,允许人们更改 A::a 意味着您的程序可能最终会依赖于全局未封装状态……这通常是设计不佳的标志。
const
但是,如果您的成员是,那么您确实将一个常量与您的类相关联,这还不错。
class A {
public:
static const int a = 4;
}
std::cout << "A:a is always " << A::a << std::endl;
Run Code Online (Sandbox Code Playgroud)
根据更新的问题进行编辑 如果您在构建类时需要帮助,我建议您使用某种工厂。如果我理解您的要求,您希望能够将一个值注入到每个 A 类和 B 类实例中。此值“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);
}
}
Run Code Online (Sandbox Code Playgroud)
该getUniqueNumberForNow()
函数只是获取您应有的任何值。然后它将被存储在中class C
并可在创建A
an\or期间使用B
。现在只需将A
andB
的 CTOR 设为私有并将两者都设为C
a friend
,您将只有一种方法来创建A
or B
,并且它将始终使用正确的值。
有关好友课程的信息,请参阅下面评论中的 NeilMonday 链接。
最后一件事是,如果您想为每个实例化更改值,A
您可以在工厂中执行此操作:
static A createA(){
return A(getUniqueNumberForNow());
}
Run Code Online (Sandbox Code Playgroud)
但是,如果这确实是您想要的,那么只需执行以下操作:
class A {
public:
A() : val (getUniqueNumberForNow()), b(B(val)){}
}
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
3410 次 |
最近记录: |