C++ 静态成员

 

 

  接下来,我们准备为大家介绍"静态成员"

 

   为什么要使用"静态成员"?原因是,我希望在不同的对象之间共享某些成员,这里的成员就是属性,只是换个表达方式

 

   举一个例子,例如:在游戏进行的过程中,我们会产生多个的敌人,所以,在类中,我们会定义一个属性去记录敌人的总数量,当敌人死亡时,也需要减少敌人的总数量,这个敌人总数量的属性不需要存在于每一个敌人对象中,而只需要让每一个敌人去共享它就可以了,否则,当敌人的数量有变化时,就需要对每个敌人对象中的数量属性进行修改,这样,工作量就大大增加了,所以,我们就需要通过静态属性去定义敌人的总数量。

 

   静态成员的特性:

    静态成员定义在类中,但需要在类外实现,即分配内存空间,因为,类只是一个类型,是不会分配内存空间,所以,要让不同对象去共享静态成员,就需要在类外实现静态成员,这样,系统才会为静态成员分配内存空间,从而,让不同对象可以去访问它。

 

   静态成员定义的语法格式:

 

    static 类型关键字 属性名;

 

   语法格式分析:

   (1)static关键字开头,说明是静态。

   (2)类型关键,即C语言中的数据类型,如整形int,浮点形float等。

   (3)属性名字,即成员名字,按C语言变量的命名规则定义即可。

   (4)最后就是一个分号。

 

   静态成员实现的语法格式:

 

    类型关键字 类名::属性名 = 初值;

 

   语法格式分析:

   (1)类型关键,即C语言中的数据类型,如整形int,浮点形float等。

   (2)类名,静态成员所在类的名字。

   (3)两个冒号,格式要求,不能省略。

   (4)属性名。

   (5)等于号,以及初值。

   (6)最后就是一个分号。

 

 

  接下来,我们结合例子作进一步的学习

 

   例子:

    class Person  //定了一个描述人的类Person

    {

      public:

        char *Name;     //名字属性

        int Life;       //生命属性

        static int Count;   //记录人数属性         

 

        Person()

        {

          Life = 10;

          Count = Count + 1;  //每次定义一个象,就计数加1

        }

 

        ~Person()

        {

          Life = 0;

          Count = Count - 1;  //对象生命周期结束时,就计数减1

        }

    }

 

    int Person::Count = 0; //对静态属性Count分配内存空间并赋初值0;

 

   

  void main()

  {

    Person  p1;  //通过Person类定义了一个对象p1,同时,调用了构造函数将属性Life设置为10

             同时,对属性Count进行计数加1,所以,Count的值由0变为1。

   

    Person  p2;  //通过Person类定义了一个对象p2,同时,调用了构造函数将属性Life设置为10

             同时,对属性Count进行计数加1,所以,Count的值由1为2。

 

    p2.Count = 99; //通过对象p2调用静态属性Count,并对它赋值为99,所以,

             Count的值由2为99。

 

 

    p2.Life= 13; //通过对象p2调用属性Life,并对它赋值为13,所以,

             p2对象中的Life的值由10为13

 

 

    int tmp = p1.Life;//对象p1中的Life在定义时通过构造函数赋值为10,所以,这个赋值操作

              后,变量tmp中的值为10

 

    tmp = p1.Count; //对象p1调用Count,而Count中的值,在上面p2对象调用Count时

              已赋值为99,所以,赋值操作后,变量tmp中的值为99

  }

 

  小结:

   在上面的例子中,我们可以看到对象p1与p2是共享静态属性Count,当p2调用Count并改变其值为99以后,p1再调用Count时,其值,还是99,所以,是共享的。

     而p1与p2中的Life属性就是互相独立的,大家可以看到当对象p2调用Life属性并赋值为13后,对象p1中的属性Life中的值没有受到影响,仍然是10,所以,是独立的。

 

 

 

  通过上面的学习,相信大家对静态属性有了一个初步了解,但是,如何灵活地运用这个知识点呢?那么,我们就要通过下方的按钮进入到游戏中,然后,运用该知识点去完成任务,这样,才可以加深大家对该知识点的理解和运用,以及“尽快进入到编程的状态”

 

  要达到灵活运用,是需要通过不停地反复训练才可以做到,所以,不要停留在理论规则上面,快动起来吧!

 

 

(通过游戏模式学习与训练,需要在电脑上运行)

进入游戏学习与训练