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;
}
相关推荐
码匠许师傅1 小时前
【C++ 面试真题】24. 聊聊 C++ 的时间日期处理
java·c++·面试
闻道且行之1 小时前
图片处理助手|泊松融合原理 + C++ 工程实现,seamlessClone 三模式一次讲透
数据库·c++·人工智能·opencv
莫浅子2 小时前
day01-USB架构与枚举
c++·单片机·嵌入式驱动
不会代码的小猴2 小时前
7. JSON
开发语言·c++·笔记·qt·算法·json
沫璃染墨3 小时前
《Qt从零入门系列(六):信号与槽进阶——从多种连接方式到Lambda表达式》
开发语言·c++·qt·代码规范·设计规范·qt5
小小龙学IT4 小时前
ZeroMQ(libzmq)开源消息库深度解析:brokerless 时代的轻量消息内核
c++·开源
Benny_Tang4 小时前
题解:P10230 [COCI 2023/2024 #4] Lepeze
c++·算法
我变成萤火虫5 小时前
反悔贪心(经典题目讲解)
c++·算法·贪心算法·stl·排序算法·反悔贪心
_Narcissus_5 小时前
排序算法总结表格
c语言·数据结构·c++·笔记·算法·排序算法·总结
兔兔兔兔17 小时前
记录C++ 8
开发语言·c++