• 静态成员


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

    静态数据成员

    静态数据成员在定义或说明时前面加关键字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

  • 相关阅读:
    (转)Shell中read的用法详解
    How to install OpenResty
    MYSQL随机抽取查询 MySQL Order By Rand()效率问题
    NGINX、PHP-FPM开机自动启动
    Nginx和PHP-FPM的启动/重启脚本 [转发]
    绕过 <?PHP exit('Access Denied'); ?> 限制
    OpenResty(Nginx)+Lua+GraphicsMagick实现缩略图功能
    ImageMagick资料
    MySQL5.5 RPM安装的默认安装路径
    PHP编译支持mysqli
  • 原文地址:https://www.cnblogs.com/hunter-w/p/13266253.html
Copyright © 2020-2023  润新知