• C++ 类中的static成员的初始化和特点


    C++ 类中的static成员的初始化和特点

    #include <iostream>
    
    using namespace std;
    
    class Test
    {
    public:
        Test() : y(1), r(y), d(3){} //对于常量型成员变量和引用型成员变量,必须通过参数化列表的方式进行初始化。
        ~Test(){}
    
        int y;      //普通变量成员
        int &r;     //引用成员变量
        const int d;    //常量成员变量
        static int c;   //静态成员变量
        static const int x = 2.1;   //静态常量整型成员变量
        static const int xx;        //静态常量整型成员变量声明
        static const double z;  //静态常量非整型成员变量声明
        static const float zz = 6.6;    //静态常量非整型成员变量
    };
    
    
    const int Test::xx = 4; //静态常量整型成员变量定义
    const double Test::z = 5.1; ////静态常量非整型成员变量定义
    int Test::c = 2;
    
    int main(void)
    {
        cout << Test::x << endl;    
    
        return 0;
    }
    

      

    这些特殊类型的成员变量主要有:

    1. 引用
    2. 常量
    3. 静态变量
    4. 静态整型常量
    5. 静态非整型常量

    对于==1. 引用==和==2. 常量==,成员变量必须通过构造函数的==参数列表==的方式初始化。例如:上述程序中的r 和 d 变量的初始化。

    对于==3. 静态变量==,static成员变量需要在类定义体外进行初始化与定义,因为static数据成员独立该类的任意对象存在,它是与类关联的对象,不与类对象关联。例如:上述程序中的c变量的初始化。

    对于==4. 静态整型常量==,该类型成员可以直接在类中初始化,也可以在类中声明,在类定义体外进行定义。例如:上述程序中的x和xx变量。

    对于==5. 静态非整型常量==,该类型也是可以在类中声明在类定义体外进行定义,或者直接在类中定义初始化。例如:上述程序中的z和zz变量。

    结论:
    静态成员属于类作用域,但不属于类对象,它的生命周期和普通的静态变量一样,程序运行时进行分配内存和初始化,程序结束时则被释放。所以不能在类的构造函数中进行初始化。

    static成员的优点
    static成员的名字是在类的作用域中,因此可以避免与其它类成员或全局对象名字冲突。
    可以实施封装,static成员可以是私有的,而全局对象不可以。
    阅读程序容易看出static成员与某个类相关联,这种可见性可以清晰地反映程序员的意图。
    static成员函数特点
    因为static成员函数没有this指针,所以静态成员函数不可以访问非静态成员。
    非静态成员函数可以访问静态成员。
    静态数据成员与类的大小无关,因为静态成员只是作用在类的范围而已。

  • 相关阅读:
    泛型通配符 ?
    算法:确定一个字符串的所有字符是否全都不同。假使不允许使用额外的数据结构
    Math类中常用方法
    很认真的聊一聊程序员的自我修养
    高性能最终一致性框架Ray之基本概念原理
    asp.net core VS goang web[修正篇]
    Asp.net core与golang web简单对比测试
    高性能Socket组件和RPC,让你像写本地代码一样开发网络应用和分布式程序
    .NET MVC 插件化框架支持原生MVC的Area和路由特性
    .NET MVC插件化开发框架源码(插件功能完善版)
  • 原文地址:https://www.cnblogs.com/2018shawn/p/10537003.html
Copyright © 2020-2023  润新知