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;
    }
  • 相关阅读:
    STM32时钟配置方法详解
    STM32 入门之 GPIO
    arm可以干什么
    四两拨千斤,ARM是如何运作、靠什么赚钱的
    ARM内核全解析,从ARM7,ARM9到Cortex-A7,A8,A9,A12,A15到Cortex-A53,A57
    ARM与单片机到底有啥区别
    实得打印机色带芯更换
    IE浏览器不能上传图片
    IE FANS
    win8,win10里面内置的IE浏览器网银无法输入密码
  • 原文地址:https://www.cnblogs.com/ylan2009/p/4320632.html
Copyright © 2011-2022 走看看