• C++ 静态成员变量和静态成员函数


        静态成员变量和静态数据成员并不属于某一个类对象,而是整个类,为所有对象共有,下面介绍 静态成员变量和静态数据成员的一些特征:

        1.静态成员变量的内存分配于全局区,不同于普通的成员变量,当用sizeof()计算类的大小的时候,静态成员变量是不算在里面的,有如下代码:

        class A
        {
             static int a;
             static int b;
         };
         int _tmain(int argc, _TCHAR* argv[])
        {
             printf("%d\n", sizeof(A));
             return 0;
        }

        结果如下:

        

        2.当类的成员变量为const static类型的时候,可以在类体中定义,也可以在类体外定义,代码如下:

        class A
        {
         public:
             static int a;
             static int b;
             const static int i = 1;
             const static char c;
        };
        const char A::c = 'b';

        3.类的静态成员的访问方式:

      可以通过作用域操作符,类的对象,引用,指向类对象的指针访问,代码如下:

      class A
      {
      public:
      static void print()
      {
        printf("hello world!\n");
      }
      };
      int _tmain(int argc, _TCHAR* argv[])
      {
        A a;
        a.print();
        A *pa;
        pa->print();
        A::print();
        return 0;
      }

      4. 因为静态成员不是任何对象的组成部分,所以静态成员函数不能被神明为const,const就是承诺不会修改函数所属对象。静态成员函数也不能被神明为虚函数。

      5.静态成员数据必须在类外初始化,类的成员函数只能对其进行赋值,而不能初始化:

    class A
    {
    public:
      A(int x)
      {
        a = x;
      }
      static int a;
      void print(){printf("%d\n", a);}
    };

    int A::a = 1;
    int _tmain(int argc, _TCHAR* argv[])
    {
      A a(2);
      a.print();
      return 0;
    }

    如果把int A::a = 1;删除的话将会出现编译错误。

  • 相关阅读:
    Java 密码扩展无限制权限策略文件
    深入浅出Mybatis系列(八)---mapper映射文件配置之select、resultMap
    git 常用功能 _fei
    ActiveMQ 使用
    【dp】导弹拦截
    【dp】求最长上升子序列
    【贪心】1225 金银岛
    最大子矩阵
    归并排序求逆序对
    服务器安全部署文档
  • 原文地址:https://www.cnblogs.com/lzmfywz/p/2983540.html
Copyright © 2020-2023  润新知