狄泰C++课程学习笔记:第二十五、二十六课:静态成员变量和静态成员方法

1、类中的静态成员变量

    所谓类中的静态成员变量,也就是类中使用static关键字来修饰的成员变量,针对静态成员变量,大致有以下几点需要注意:

        * static修饰的静态成员变量不属于任何一个对象,是该类本身的内容

        * 存储上,静态成员变量会被分配在全局数据区,在程序运行期间均有效

        * 初始化上,静态成员变量由于不数据任何一个实体对象,是当前类的所有类对象所共有的成员变量,它的初始化要在类外进行,初始化方式类似于类的成员方法的类外定义方式,如:int Test::mi = 0;

        * 使用上,一方面,该类的任意一个实体对象均可对其进行访问,另一方面,我们也可以通过类名直接访问该类中定义的共有静态成员变量,如:Test::mi;

    小例:

  1 #include <stdio.h>
  2
  3 class Test
  4 {
  5     static int _count;
  6 public:
  7     Test()
  8     {
  9         _count++;
 10     }
 11     ~Test()
 12     {
 13         --_count;
 14     }
 15     int getCount()
 16     {
 17         return _count;
 18     }
 19 };
 20
 21 int Test::_count = 0;
 22
 23 Test gT;
 24
 25 int main(int argc, char** argv)
 26 {
 27     Test t1;
 28     Test t2;
 29
 30     printf("_count = %d\n", gT.getCount());
 31     printf("_count = %d\n", t1.getCount());
 32     printf("_count = %d\n", t2.getCount());
 33
 34     Test* pT = new Test;
 35
 36     printf("_count = %d\n", pT->getCount());
 37
 38     delete pT;
 39
 40     printf("_count = %d\n", t2.getCount());
 41
 42     return 0;
 43 }

2、静态成员方法

同样的,对比用static修饰的静态成员变量,类中的成员方法若在声明时使用了static修饰,则该成员方法就成为了静态成员方法,对于静态成员方法,一般的,有以下几点需要注意:

    * 除了使用已经存在的类对象来访问类中的成员方法之外,我们也可以直接使用类名来访问类中的公有成员方法,如Test::getCount();

    * 静态成员方法在隶属于类本身,和普通的成员方法相比较,静态成员方法在使用时没有隐含的this指针传入,因此静态成员方法只能访问类中的其它静态成员方法和静态成员变量(即不可访问普通的成员方法和变量)

小例:

  1 #include <stdio.h>
  2
  3 class Test
  4 {
  5     static int _count;
  6 public:
  7     Test()
  8     {
  9         _count++;
 10     }
 11     ~Test()
 12     {
 13         --_count;
 14     }
 15     static int getCount()
 16     {
 17         return _count;
 18     }
 19 };
 20
 21 int Test::_count = 0;
 22
 23 int main(int argc, char** argv)
 24 {
 25     printf("_count = %d\n", Test::getCount()); // 通过类名直接调用静态成员方法访问静态成员变量
 26
 27     Test t1;
 28     Test t2;
 29
 30     printf("_count = %d\n", t1.getCount());
 31     printf("_count = %d\n", t2.getCount());
 32
 33     Test* pT = new Test;
 34
 35     printf("_count = %d\n", pT->getCount());
 36
 37     delete pT;
 38
 39     printf("_count = %d\n", t2.getCount());
 40
 41     return 0;
 42 }

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值