• 9. 静态成员


    使用静态数据成员的优势:

    • 静态数据成员没有进入程序的全局名字空间,因此不存在与程序中其他全局名字冲突的可能性。
    • 可以实现信息隐藏,静态成员可以是private成员,而全局对象不能。
    • 静态数据成员不属于任何对象,不因对象的建立而产生,也不因对象的析构而删除
    • 它是类定义的一部分,故使用静态数据成员不会破坏类的隐蔽性
    • 要使用必须进行初始化,其初始化不能在构造函数中进行
    • 静态数据成员的初始化在类体外(文件作用域内)进行,前面不加static
    • 对于非静态数据成员,每个类对象都有自己的副本,而静态数据成员对每个类类型只有这一个副本。——————> 因此该类类型所有对象共享访问


      静态成员就是再成员变量和成员函数前面加上关键字static

    静态成员变量

    1. 所有对象共享一份数据
    2. 在编译阶段分配内存
    3. 类内声明,类外初始化
    4. 静态成员变量也是有访问权限
    5. 静态成员变量可以通过类名和对象进行访问

    静态成员函数

    1. 所有对象共享同一个函数
    2. 静态成员函数只能访问静态成员变量,不能访问非静态成员函数变量(无法区分到底是哪个对象上的数据)
    3. 静态成员函数也是有访问权限
    4. 静态成员函数可以通过类名和对象进行访问

    注:对于静态成员函数不能访问非静态成员函数变量可以这样理解:由于非静态成员变量必须有一个对象指向它才能访问,而静态成员变量是共享一份数据,这份数据可以是任何对象,那么非静态成员变量就分不清是哪个对象访问的它


    #include <iostream>
    using namespace std;
    class Person
    {
    public:
        //静态成员函数
        static void func()
        {
            m_a = 100 ;//静态成员函数可以访问 ————> 静态的成员变量
            cout << "static void func调用"<<endl;
        }
        static int m_a; //静态成员变量,类内声明
        //静态成员函数也是有访问权限的
    };
    int Person :: m_a =0;//类外初始化
    
    //静态成员函数有两种访问方式
    void test01()
    {
        //1. 通过对象访问
        Person p;
        p.func();
        //2.通过类名访问
        Person::func();
    }
    
    //静态成员变量有两种访问方式
    void test02()
    {
        //1.通过对象
        Person p1;
        p1.m_a = 100;
        cout << "p1.m_a = " << p1.m_a << endl;
    
        //2.通过类名
        cout << "m_a" << Person :: m_a <<endl;
    }
    int main()
    {
        test01();
        test02();
        system("pause");
        return 0;
    }
    

    小结:

    • 静态数据成员初始化的格式如下:

      • <类型><类名>::<静态数据成员>=<值>;
    • 在引用静态数据成员时采用以下格式:

      • <类名> :: <静态数据成员>
      • <对象名>.<静态数据成员>
    哪有什么胜利可言,坚持意味着一切
  • 相关阅读:
    extjs grid renderer用法
    spket对Extjs4的支持方法 eclipse插件spket安装 extjs4 提示
    Delphi关于多线程同步的一些方法 zb
    指针学习(一) zb
    struts2中action实现ModelDriven后无法返回json的问题
    前端css编写规范
    javascript 原型链
    chrome bug
    浏览器缓存
    RegExp
  • 原文地址:https://www.cnblogs.com/BY1314/p/12809826.html
Copyright © 2020-2023  润新知