zoukankan      html  css  js  c++  java
  • 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

  • 相关阅读:
    JQuery Table 合并单元格-解决Bug版本
    SQLServer当数据导入平面文件
    【BZOJ1294】[SCOI2009]围豆豆Bean 射线法+状压DP+SPFA
    【BZOJ3590】[Snoi2013]Quare 状压DP
    【BZOJ4036】[HAOI2015]按位或 FWT
    【BZOJ1502】[NOI2005]月下柠檬树 Simpson积分
    【CF603E】Pastoral Oddities cdq分治+并查集
    【CF891E】Lust 生成函数
    【CF618G】Combining Slimes 概率+矩阵乘法
    【CF633H】Fibonacci-ish II 莫队+线段树
  • 原文地址:https://www.cnblogs.com/tanrong/p/8463153.html
Copyright © 2011-2022 走看看