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

  • 相关阅读:
    Nginx访问日志、 Nginx日志切割、静态文件不记录日志和过期时间
    nginx的安装 、Nginx默认虚拟主机、nginx用户认证、nginx 域名重定向
    lnmp架构、mysql的安装、php的安装、nginx相关
    限定某个目录禁止解析php 、限制user_agent 、php的配制文件、PHP的动态扩展模块
    配置url防盗链、目录权限访问控制Directory、文件访问权限控制FilesMatch
    指令的概述
    点击事件交互示例
    日期过滤器示例
    in和not in注意事项
    mysql里的case用法详解
  • 原文地址:https://www.cnblogs.com/hunter-w/p/13266253.html
Copyright © 2011-2022 走看看