zoukankan      html  css  js  c++  java
  • 静态成员

    定义数据成员为静态变量,表明此全局数据逻辑上属于该类。
    定义成员函数为静态函数,表明此全局函数逻辑上属于该类,而且该函数只对静态数据、全局数据或者参数进行操作,而不对非静态数据成员进行操作。

    静态数据成员

    静态数据成员在定义或说明时前面加关键字static,如:

    class A
    {
        int n;
        static int s;
    };
    

    sizeof 运算符不会计算静态成员变量,sizeof(CMyclass)等于4。使用静态数据成员可以节省内存,因为它是所有对象所公有的,因此,对多个对象来说,静态数据成员只存储一处,供所有对象共用。

    静态数据成员是静态存储的,它是静态生存期,必须对它进行初始化。
    静态成员初始化与一般数据成员初始化不同,类数据成员在类内部声明,但是静态成员必须在类的外面初始化,静态数据成员初始化的格式如下:
    <数据类型><类名>::<静态数据成员名>=<值>

    如果一个类中说明了静态数据成员,只有在这个类的第一个对象被创建时被初始化,自第二个对象起均不作初始化。对A类中静态数据成员s进行初始化:
    int A::s = 0;
    初始化在类体外进行,而前面不加static,以免与一般静态变量或对象相混淆。
    static int A::s = 0; // error C2720: “A::s”: 成员上的“static ”存储类说明符非法

    引用静态数据成员时,采用如下格式:
    <类名>::<静态成员名>

    静态数据成员被类的所有对象所共享,包括该类派生类的对象。即派生类对象与基类对象共享基类的静态数据成员。

    静态成员函数

    静态函数仅可以访问静态成员,或是静态成员函数或是静态数据成员。

    因为静态成员函数属于整个类,在类实例化之前就已经分配空间了,而类的非静态成员必须在类的实例化对象之前才能有内存空间,所以类的静态成员访问非静态成员就会出错,就好像没有声明一个变量却提前使用它一样。但类的非静态成员函数却可以调用静态成员函数。

    调用静态成员函数使用如下格式:
    <类名>::<静态成员函数名>(<参数表>)

    和非静态成员函数一样,静态成员函数可以在派生类中被重定义,派生类会隐藏基类同名的函数。但静态成员函数不能为virtual函数,这是因为virtual函数由编译器提供了this指针,而static是没有this指针的。

    此外,可通过类的对象来访问静态数据成员和静态成员函数

    参考
    https://www.cnblogs.com/wkfvawl/p/10834549.html#navigator

  • 相关阅读:
    vscode .vue文件中不能提示html代码
    vscode不能提示已经定义的类名和id?
    vue常用指令
    移动端性能陷阱和硬件加速
    关于样式的获取问题
    “'npm' 不是内部或外部命令,也不是可运行的程序”
    JavaScript之闭包问题
    Sublime Text 套件介紹:Pretty JSON
    教你解决Sublime Text中文乱码问题
    C# 连接Mysql 字符串
  • 原文地址:https://www.cnblogs.com/hunter-w/p/13266253.html
Copyright © 2011-2022 走看看