• C++ 的static 与 const


    1.static成员变量(非const)必须在类外定义,在类中只是作为声明(声明其scope为该类),不能使用类初始化成员列表来初始化,只能在定义的时候初始化。

    2.static const的成员变量必须在类中定义的时候就初始化,不能在类外再定义,不能使用类初始化成员列表初始化。

    3.static 与 virtual不能共存于一个函数上,即没有静态虚函数,原因在于静态函数没有this指针,无法通过对象实例来调用,而虚函数与普通成员函数一样必须通过this指针来调用。但是static成员可以通过类实例或类来调用,即A a; a.b或A::b都可。

    4.非static的const成员,和引用类型的成员,因为在定义的时候就必须初始化,所以必须使用类初始化成员列表来初始化。

    5.在一个函数的最后加上const,则这个函数只能是一个成员函数,而且是非静态的。因为const的函数就隐含着“this指针所指的对象不能被修改”这个意思。同时,const函数不能对任何成员函数做赋值等修改的动作,而且如果一个实例是const实例,这个实例只能调用const函数。

    6.static成员在编译的时候就已经确定了(未显式初始化的则为0)。而普通成员则在创建实例的时候初始化。

    故一个类对象里面的成员的初始化顺序:

    程序加载时确定:

    a.静态成员变量的空间及值。

    b.成员函数的空间及地址。

    创建对象时(运行时)确定:

    c.虚函数表(如果该类或该类的任一个基类,超类有虚函数)

    e.普通成员变量的空间及值

    #include<iostream>
    using namespace std;
    
    class A
    {
    public:
        int a;
        static int b;
        const int c;
        static const int d = 4;
    public:
        A(int i,int j):c(i),a(j){}
        void print(){}
    };
    
    int A::b;//这个值默认为0,因为static成员放在全局静态区。
    
    int main()
    {
        A a(1,2);
        cout<<a.a<<endl;
        cout<<a.b<<endl;
        cout<<a.c<<endl;
        cout<<a.d<<endl;
    }

    参考链接:http://www.cnblogs.com/ylan2009/p/4320632.html

  • 相关阅读:
    将字符串指针ps1 和 ps2之间的内存拷贝出来
    wm_copydata不等返回值处理 SendMessage SendMessageTimeout
    成为编程高手的八大奥秘
    成功老板防骗反骗技巧
    创业者怎样掌握简便的创业机会
    爱过了,恨过了,在这里留下最想对他/她说的那句话!(转)
    创业者须知的8条创业逻辑
    超越无形, 做只“一天到晚会游的鱼”
    男性的12种健康食物!
    原始商人的深度思考(二)市场准入时机的把握
  • 原文地址:https://www.cnblogs.com/tanrong/p/8463153.html
Copyright © 2020-2023  润新知