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;
}
相关推荐
叼烟扛炮8 分钟前
C++第四讲:类和对象(下)
c++·算法·类和对象
Rabitebla8 分钟前
vector 的骨架:三根指针、模板陷阱与迭代器失效的第一现场
开发语言·数据结构·c++·算法
晚风吹红霞1 小时前
C++异常处理核心知识点全解析
开发语言·c++
CoderCodingNo1 小时前
【信奥业余科普】C++ 的奇妙之旅 | 17:面的铺展与文本的本质——二维数组与字符串
开发语言·c++
迷途之人不知返2 小时前
优先级队列:priority_queue
数据结构·c++
曦夜日长2 小时前
C++ STL容器string(一):string的变量细节、默认函数的认识以及常用接口的使用
java·开发语言·c++
代码中介商2 小时前
C++ STL 标准模板库完全指南:从容器到迭代器
开发语言·c++·stl
winner88812 小时前
C++ 构造函数、析构函数、虚函数、虚析构
开发语言·c++
想唱rap2 小时前
应用层协议与序列化
linux·运维·服务器·网络·数据结构·c++·算法
许长安2 小时前
protobuf 使用详解
c++·经验分享·笔记·中间件