• 类的静态成量变量必须初始化


    因为类的静态成员变量是所有实例共用的.所以得在类外初始化.

    调用的时候可以通过对象调用,也可以通过类直接调用

    class A
    {
    public:
        
    int i;    //有默认值
    };
    class B
    {
    public:
        
    static int n;
        static A Aobj;
    };

    int B::n = 1;    //静态成员变量的初始化
    A B::Aobj;       //静态成员变量的初始化(实例化)

    void main()
    {
        B Bobj;    //注释掉这行也能输出B::n
        printf(
    "B::n=%d Bobj.n=%d Bobj.Aobj.i=%d\n", B::n, Bobj.n, Bobj.Aobj.i);
    }

     输出“B::n=1 Bobj.n=1 Bobj.Aobj.i=0 ”

    私有的静态成员变量也是放在类外初始化的.这看起来跟它的私有属性不相符.

    再做下面的测试,发现了一个有趣的现象.

    class B
    {
        
    static int i;
    public:
        B(){i
    =3;};    //把这行注释掉,输出变成2
        int p(){return i;};
    };

    int B::i = 2;      //把这行注释掉,编译报错

    void main()
    {
        B Bobj;
        printf(
    "private: static int B::i=%d\n", Bobj.p());    //输出3
    }


    类外的初始化那一行是必要的,而且是在构造函数之前就执行了的

    最重要的一点,如果静态成员变量不初始化,编译会报错.

  • 相关阅读:
    Nosql介绍
    linux系统安装mysql
    linux下装tomcat教程
    linux系统下安装jdk教程
    XML解析
    XML 可扩展标记语言
    Oracle——子查询
    数据库——Oracle(增删改查,单行函数,多行函数,多表查询)
    Ubuntu16.04Scrapy爬虫定时任务
    大数据——zookeeper分布式集群管理工具的学习与使用
  • 原文地址:https://www.cnblogs.com/hgy413/p/3693622.html
Copyright © 2020-2023  润新知