小工具知识网

当前位置: 首页 > 行业知识 > 类和对象【五】const成员和static成员

行业知识

类和对象【五】const成员和static成员

2026-10-26 15:16:17 来源:互联网转载

文章目录

  • const修饰的成员和对象
    • const修饰成员变量
    • const修饰成员函数
    • const修饰对象
    • static修饰成员和对象
      • static修饰成员变量
      • static修饰成员函数的特点
      • static修饰的对象

        const修饰的成员和对象

        const修饰成员变量

        此时和const修饰普通变量一样

        只改变了成员变量的属性【从可读可写–>只读】,即const修饰哪个成员变量那个成员变量就的值就不能再被修改了

        例

        被const修饰的成员变量只能在成员初始化列表中赋初值

        因被为const修饰后就该成员变量就具有了常属性,就跟常量一样不能被赋值改变,所以const修饰的变量只能在定义初始化的时候获得初始值,之后就改变不了了

        而成员初始化列表【不了解的index.php/tags-653.html" >可以看我这篇文章:类和对象【二】this指针,构造函数和成员初始化列表【超详细】】

        就是对象中存储的成员变量定义和初始化的地方

        例


        const修饰成员函数

        1. const要放在成员函数声明和定义的()后面

        2. const修饰成员函数时,其实修饰的是 *this,即此时成员函数中的this指针的类型是

          const A(类名)* const this

        3. const修饰的成员函数中不能对当前类的任意成员变量(除了静态成员变量【因为静态成员变量没有存储在对象中】)进行修改,但是可以访问

          因为2中提到的const修饰成员函数时其实修饰的是 *this,所以不能通过this的解引用去修改this指向的对象中存储的数据了,也就是this可以指向的非静态成员变量不能被修改了

          例

          4.在类中的成员变量声明时加上mutable,就 可以让它在const修饰的函数中也可以修改

          例


        const修饰对象

        1. const修饰的对象中存储的数据就不能被修改了,也就是存储在对象中的任意一个成员变量都不能被修改[static修饰的成员变量可以被修改,因为static修饰的成员变量不存储在对象中]

        2. const修饰的对象只能调用const修饰的成员函数

          因为const修饰了对象之后,要保证在任何时候对象中的数据都不能修改

          所以对象调用成员函数时,在成员函数中也不能改变对象中的数据,只有const修饰的成员函数可以保证这一点


        static修饰成员和对象

        static修饰成员变量

        1. static修饰的成员变量在一个类中只有一份,且它不存储在任何一个对象中

          任何一个对象都可以访问他,但访问到的都是同一个同一片内存的数据成员

          [所以如果有一个修改了static修饰数据成员,那么其他的对象去访问的时候,访问到的是被修改之后的static修饰数据成员]

          例

        2. static修饰的成员变量是存放在全局区的,而且它的生命周期也和全局变量一样长

        3. static修饰数据成员只在类里声明,定义和初始化在全局中

          因为static修饰的变量必须初始化,而成员变量初始化只能在成员初始化列表中初始化

          但是它没有存储在对象里,所以它不能用成员初始化列表初始化

          而且它要存储在全局区

        4. static修饰数据成员,可以用类名+::访问

          例

        5. static修饰的成员变量不能在类里给缺省值

          因为缺省值是传给成员初始化列表的

          而成员初始化列表只能定义和初始化对象里存的成员


        static修饰成员函数的特点

        1. static修饰成员函数,可以用类名+::的方式调用

          例

        2. static修饰成员函数中不能有不是静态成员的成员

          例

          [因为static修饰的成员变量和成员函数的生命周期,比普通类的成员的生命周期更长,这样就可能会出现调用static修饰成员函数时,普通的类的成员没有初始化/这个成员已经被销毁的现象,所以直接禁止了]

        3. static修饰成员函数中没有this指针

          [因为static修饰的成员变量和成员函数的的生命周期比普通的对象的生命周期都长,就有可能出现,调用static修饰成员函数时,对象还没有创建/已经销毁的情况,因为this指针指向调用成员函数的对象的,如果这个对象对象还没有创建/已经销毁,那this就是野指针了]


        static修饰的对象

        1. static修饰的对象的生命周期和全局变量一样长

        2. 局部域中的static修饰的对象创建是代码执行到的时候才创建,而不是和全局域中的一样在main函数调用之前就创建了

上一篇:不添加好友怎么对话?

下一篇:揭秘免费代理IP背后的秘密与真相