当前位置: 首页 > article >正文

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;

};

具体示例如下:


#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称该对象为常对象
   常对象只能调用常函数

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;
}

 


http://www.kler.cn/a/146829.html

相关文章:

  • 流批一体计算引擎-18-离线和实时缝合成的流批一体缘何成为主流
  • 《盘古大模型——鸿蒙NEXT的智慧引擎》
  • C#,入门教程(27)——应用程序(Application)的基础知识
  • Qt 自动根据编译的dll或exe 将相关dll文件复制到目标文件夹
  • 龙蜥Linux系统部署docker21.1.3版本
  • uniapp 之 uni-forms校验提示【提交的字段[‘xxx‘]在数据库中并不存在】解决方案
  • MySQL特点和基本语句
  • 总结Vue3里一些常见的组合式api
  • 媒体增加日活量的有效策略
  • ctfshow sql
  • C语言WFC绘制矩形
  • Python武器库开发-前端篇之CSS盒模型(三十一)
  • C语言-方阵循环右移
  • pytorch实现遥感建筑物提取
  • 互联网上门洗鞋店小程序
  • Chatbot开发三剑客:LLAMA、LangChain和Python
  • 前端OFD文件预览(vue案例cafe-ofd)
  • beanFactory和Factorybean有啥区别
  • Nginx反向代理实现负载均衡+Keepalive实现高可用
  • go的HTTP网络编程
  • STM32入门--看门狗
  • python网络通信之基础知识填坑
  • 【算法萌新闯力扣】:回文链表
  • 前端实现埋点
  • 前端铜九铁十面试必备八股文——性能优化
  • C#,《小白学程序》第九课:堆栈(Stack),先进后出的数据型式