C++ :const修饰成员函数

常函数:

常函数:

成员函数后加const后我们称为这个函数为常函数

常函数内不可以修改成员属性

成员属性声明时加关键字mutable后,在常函数中依然可以修改

属性可修改:

class Person

{

public:

void showPerson()

{

m_A = 100;

}

int m_A;

};

加上 const 属性不可修改:

class Person

{

public:

void showPerson() const

{

m_A = 100;

}

int m_A;

};

具体示例如下:

cpp 复制代码
#include <iostream>
using namespace std;

class Person
{
public:

    //隐含在每一个成员函数内部都有一个this指针
    //this指针的本质是: 一个指针常量, 指针的指向不可修改,值可以修改
    //如果想让指针指向的值也不可以修改,需要声明常函数
    //const Person* const this;
    //在成员函数 后面加const,修饰的是this指向,让指针指向的值也不可以修改
    void showPerson() const   //常函数 (常函数中不允许修改指针指向的值)
    {  
        this->m_B = 100;    //修改加关键字mutable
        //this->m_A = 100;
        //this = NULL; //不能修改指针的指向 Person* const this;
    }
    int m_A;
    mutable int m_B;   //特殊变量,即使在常函数中,也可以修改这个值,加关键字mutable
};
   
void test01()
{
    Person p;
    p.showPerson();

}
int main()
{
    test01();

    system("pause");
    return 0;
}

常对象:

常对象:

声明对象前加const称该对象为常对象

常对象只能调用常函数

cpp 复制代码
class Person
{
public:

    //隐含在每一个成员函数内部都有一个this指针
    //this指针的本质是: 一个指针常量, 指针的指向不可修改,值可以修改
    //如果想让指针指向的值也不可以修改,需要声明常函数
    //const Person* const this;
    //在成员函数 后面加const,修饰的是this指向,让指针指向的值也不可以修改
    void showPerson() const   //常函数 (常函数中不允许修改指针指向的值)
    {  
        this->m_B = 100;    //修改加关键字mutable
        //this->m_A = 100;
        //this = NULL; //不能修改指针的指向 Person* const this;
    }
    void func()
    {
        m_A = 10000;
    }

    int m_A;
    mutable int m_B;   //特殊变量,即使在常函数中,也可以修改这个值,加关键字mutable
};
   
void test01()
{
    Person p;
    p.showPerson();

}

void test01()
{
    const Person p; //常量对象   在对象前面加上const,变为常对象
    //p.mA = 100; //常对象不能修改成员变量的值,但是可以访问
    p.m_B = 100;  //m_B是特殊的值 但是常对象可以修改mutable修饰成员变量

    //常对象只能调用常函数
    p.showPerson();

    //p.func();    常对象不可以调用普通成员函数,因为普通成员函数可以修改属性
}


int main()
{
    test01();

    system("pause");
    return 0;
}
相关推荐
·present·1 小时前
CSAPP(Bomb lab)
c语言·c++
王老师青少年编程2 小时前
2026年信奥赛c++普及组csp-j第二轮复赛真题
c++·真题·csp·信奥赛
时间的拾荒人3 小时前
CMake 常用命令详解:从版本声明到安装部署
c++·面试
D e re k ZH5 小时前
P5025 [SNOI2017] 炸弹
c++·算法
wuminyu6 小时前
Java字节码学习总结:字节码如何加载、解析和执行
java·linux·c语言·jvm·c++
qq_406981036 小时前
c++的decltype是什么
开发语言·c++
坤坤子吖6 小时前
算法学习——单调队列
开发语言·c++·笔记·学习·算法
杜 硕7 小时前
从零开始的C++生活——第六讲——01
开发语言·c++·生活
Risehuxyc9 小时前
C++(VS2026)使用Ncap库的配置
c++
4ever.ov09 小时前
精学C++第一站 从命名空间到引用:C++入门核心语法全梳理(13000字长文)
开发语言·c++·clion