【发布时间】:2019-07-29 14:30:46
【问题描述】:
给定班级:
class A {
Public:
void foo() {
static int i;
i++;
}
};
您将如何更改它以防止 i 在此示例之后的实例之间更改:
A o1, o2, o3;
o1.foo(); // i = 1
o2.foo(); // i = 1
o3.foo(); // i = 1
o1.foo(); // i = 2
即在每个实例上为 i 分配内存。
编辑:
是的,您可以添加i 作为实例变量,但是如果您需要在各种(独立)函数中使用这些计数器怎么办?我希望将变量的范围仅限于函数(“在成员函数中”)。如果需要各种计数器,在类中添加i、c、counter、counter_2 等变量似乎很尴尬,不是吗?
【问题讨论】:
-
.... 这就是 instance 变量的用途
-
static变量是您不想要唯一实例时所做的事情。如果您想保留class的每个实例的状态,则需要将该状态存储为class的成员。 -
赞成。这个问题很奇怪,但不一定很差。
-
想一想如果这确实按您希望的方式工作会发生什么:成员内部的“静态”变量必须存储在对象实例的一部分中才能特定于实例,但是在 C++ 中,您通常将类与成员实现分开声明,并且类声明必须足以让编译器计算对象的大小。由于“静态”变量是在方法内部而不是在类定义中声明的,因此只能看到定义的代码不知道它的大小。因此,我们有一个矛盾,这不能那样工作。
标签: c++ function class static member