C ++中类的static int和just int之间的区别

时间:2012-11-23 06:26:09

标签: c++

  

可能重复:
  What is the difference between static int a and int a?

我试图用简单的英语简单解释一下。我试图阅读和研究static intint之间的区别,但无论我读到什么,似乎都让我更加困惑。假设我有一个类似下面的课程

class B{
  static int i;
  int i;
  ...
}

简单的英文,两者有什么区别?想象一下,你正在向非程序员解释。 有人问了类似这样的问题here,但这并不令我满意。

4 个答案:

答案 0 :(得分:6)

这是你的隐喻。

想象一下拥有银行账户的组织。就C ++而言,该组织是您的class。想象一下,组织有代表(工人,如果你想)。就C ++而言,它们是该类的实例(或变量)。

现在,每位代表都可以拥有自己的银行账户,仅供他使用。没有其他人可以使用它。这将是正常的int

但是,每个工作人员也可以使用由他们共享的组织的银行帐户,特别是不属于他们中的任何一个。那是你的static int


现在,再次回到技术术语,万一你会想要它。我会尽量清晰简洁。

  • 正常int

    类类型的每个变量都有自己的个人变量。因此,在您的示例中,如果您生成10个B类型的变量,则每个变量都将在其中包含自己的 int i变量。

  • static int

    静态变量是类的所有变量的共享。静态变量不属于任何类变量,它属于类本身。因此,如果您要创建10个B类型的变量,则每个变量都可以访问static int i,但它们都不会拥有它(它是共享的)。

答案 1 :(得分:3)

类中的静态意味着对象的所有实例B a,b,c,d;具有完全相同的成员 i a.i++;更改b.ic.i等内容

类内部和外部的静态差异是使静态变量仅对类或通过类可见。当然,变量不存储在类中,而是存储在其他地方。此语法只允许将变量的范围定义到此特定类。

当然,非静态成员对每个实例都是唯一的。

答案 2 :(得分:1)

如果声明B的多个对象,那么每个对象都有自己的int i副本。 但是,对于所有对象,只有一个静态int i。

B::i //This will refer to the static i
//As you can see this is accessed through the class name

B obj, obj2;
obj.i //This will refer to the obj member i 
obj2.i // and will be different from this which is obj2 member i

答案 3 :(得分:1)

为避免混淆重复的名称,请想象以下内容:

class foo
{
    public:
       int i;
       static int j;
};

static int j;定义了一个名为j的变量,该变量与类foo相关联。无论您创建的foo类型的对象有多少,都只会有一个j。在这种情况下,班级foo以外的任何人都可以使用语法j访问foo::j

i的定义形成对比,fooi类型对象的成员。 为foo类型的每个对象创建了一个唯一的。 例如。 foo myObject; foo myOtherObject;

myObject.i = 42; myOtherObject.i = 180;

{{1}}