• C++ 静态对象及静态成员


    13. 静态对象

    13.1 Static in C++

    • Two basic meanings:
      • Static storage
        • allocated once at a fixed address
      • Visibility of a name
        • internal linkage
    • Don't use static except inside functions and classes

    • 示例一:Global static hidden in file
    // file1.cpp
    
    int g_global;
    static int s_local; // s_local 只能在本文件中使用,具有持久化存储
    
    void func() {
        ...
    }
    
    // hidden() 只能在 file1.cpp 中访问
    static void hidden() {
        ...
    }
    
    
    // file2.cpp
    extern int g_global;
    
    

    13.2 静态成员

    • Static member variables

      • Global to all class member functions
      • Initialized once, at file scope
      • provide a place for this variable and init it in .cpp
      • No 'static' in .cpp
    • 示例一:

    #include <iostream>
    using namespace std;
    
    class A {
    public:
        A() { i = 0; }
        void print() { cout << i << endl; }
        void set(int ii){ i=ii; }
    private:
        static int i;
    };
    
    int main()
    {
        A a, b;
    
        a.set(10);
        b.print();
    
        return 0;
    }
    
    • 示例二:成员变量为 static,需要在 cpp 文件中定义
    #include <iostream>
    using namespace std;
    
    class A {
    public:
        A() { i = 0; }
        void print() { cout << i << endl; }
        void set(int ii){ i=ii; }
    private:
        static int i;
    };
    
    // 如果成员变量为 static,需要提供下面的语句进行定义
    int A::i;
    
    int main()
    {
        A a, b;
    
        a.set(10);
        b.print();
    
        return 0;
    }
    
    • 示例三:编译失败
    • initializer list 只能对非静态成员进行初始化
    #include <iostream>
    using namespace std;
    
    class A {
    public:
        A():i(0) { }
        void print() { cout << i << endl; }
        void set(int ii){ i=ii; }
    private:
        static int i;
    };
    
    // 如果成员变量为 static,需要提供下面的语句进行定义
    int A::i;
    
    int main()
    {
        A a, b;
    
        a.set(10);
        b.print();
    
        return 0;
    }
    

    13.3 静态成员函数

    • 示例:
    #include <iostream>
    using namespace std;
    
    class A {
    public:
        A() { i = 0; }
        void print() { cout << i << endl; }
        void set(int ii){ i=ii; }
        static void say(int ii) { cout << ii << i << endl; }
    
        // 静态函数,不能使用非静态成员 k
        // static void say2(int ii) { cout << ii << k << endl; }
        
    private:
        int k;
        static int i;
    };
    
    // 如果成员变量为 static,需要提供下面的语句进行定义
    int A::i = 20;
    
    int main()
    {
        A a, b;
    
        a.set(10);
        b.print();
    
        a.say(0);
        A::say(0);
        
        return 0;
    }
    

    参考链接:

  • 相关阅读:
    程序员的进阶课-架构师之路(2)-数组
    程序员的进阶课-架构师之路(1)-数据结构与算法简介
    ASP.NET开发实战——(三)第一个ASP.NET应用《MyBlog》
    ASP.NET开发实战——(二)为什么使用ASP.NET
    ASP.NET开发实战——(一)开篇-用VS创建一个ASP.NET Web程序
    asp.net core 系列 12 选项 TOptions
    Linux编程 1 (文件系统路径说明, 目录结构说明)
    asp.net core 系列 9 三种运行环境和IIS发布
    asp.net core 系列 6 MVC框架路由(下)
    asp.net core 系列 4 注入服务的生存期
  • 原文地址:https://www.cnblogs.com/linkworld/p/16382935.html
Copyright © 2020-2023  润新知