美文网首页
关于 static、const、static const、con

关于 static、const、static const、con

作者: affyzh | 来源:发表于2020-03-10 16:53 被阅读0次

    类里的const成员初始化:

    在一个类里建立一个 const 时,不能给他初值。

    class Test{
    public:
        Test():i(100){}
    private:
        const int i=100;//error!!!
    };
    //或者通过这样的方式来进行初始化
    Test::Test():i(100){}
    

    类里的 static 成员初始化:

    类中的static 变量是属于类的,不属于某个对象,它在整个程序的运行过程中只有一个副本,因此不能在定义对象时 对变量进行初始化,就是不能用构造函数进行初始化,其正确的初始化方法是:

    数据类型 类名::静态数据成员名=值;
    
    class Test{
    public:
        Test();
    private:
        static int i;
    };
     
    int Test::i=20;
    

    这表明:

    1. 初始化在类体外进行,而前面不加 static,以免与一般静态变量或对象相混淆
    2. 初始化时不加该成员的访问权限控制符privatepublic
    3. 初始化时使用作用域运算符来表明它所属的类,因此,静态数据成员是类的成员而不是对象的成员。
    4. 类里的 static constconst static 成员初始化

    这两种写法的作用一样,为了便于记忆,在此值说明一种通用的初始化方法:

    class Test{
    public:
        static const int mask1;
        const static int mask2;
    };
    const Test::mask1=0xffff;
    const Test::mask2=0xffff;
    //它们的初始化没有区别,虽然一个是静态常量一个是常量静态。静态都将存储在全局变量区域,其实最后结果都一样。可能在不同编译器内,不同处理,但最后结果都一样。
    

    完整实例

    #ifdef A_H_
    #define A_H_
    #include <iostream>
    usingnamespace std;
    class A{
        public:
            A(int a);
            staticvoid print();//静态成员函数
        private:
            static int aa;//静态数据成员的声明
            staticconst int count;//常量静态数据成员(可以在构造函数中初始化)
            const int bb;//常量数据成员
    };
     
    int A::aa=0;//静态成员的定义+初始化
    const int A::count=25;//静态常量成员定义+初始化
     
    A::A(int a):bb(a){//常量成员的初始化
        aa+=1;
    }
     
    void A::print(){
        cout<<"count="<<count<<endl;
        cout<<"aa="<<aa<<endl;
    }
     #endif
     
    void main(){
        A a(10);
        A::print();//通过类访问静态成员函数
        a.print();//通过对象访问静态成员函数
    }
    

    初始化位置

    静态成员不能在类的定义里初始化(除int外)。不能在头文件里初始化。
    比如定义了myclass.h,一般放到 myclass.cpp 里初始化它。

    参考:https://www.runoob.com/w3cnote/cpp-static-const.html

    相关文章

      网友评论

          本文标题:关于 static、const、static const、con

          本文链接:https://www.haomeiwen.com/subject/bzqgdhtx.html