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

C++ 常函数 常对象 const

this 指针的本质: Person * const this;

常函数

用 const 修饰成员函数时,const 修饰 this 指针指向的内存区域,成员函数体内不可以修改本类中的任何普通成员变量。

void show() const
{
}//const Person const this;//限制了 this 指针

当成员变量类型符前用 mutable 修饰时例外。

mutable int m_A;

常对象

常对象只能调用 const 的成员函数

常对象可访问 const 或非 const 成员属性,不能修改,除非成员用 mutable 修饰。

案列

//const修饰成员函数
class Person{
public:Person(){this->mAge = 0;this->mID = 0;}//在函数括号后面加上const,修饰成员变量不可修改,除了mutable变量void sonmeOperate() const{//this->mAge = 200; //mAg e不可修改this->mID = 10;}void ShowPerson(){cout << "ID:" << mID << " mAge:" << mAge << endl;}
private:int mAge;mutable int mID;
};int main(){Person person;person.sonmeOperate();person.ShowPerson();system("pause");return EXIT_SUCCESS;
}
const修饰类对象
class Person{
public:Person(){this->mAge = 0;this->mID = 0;}void ChangePerson() const{mAge = 100;mID = 100;}void ShowPerson(){this->mAge = 1000;cout << "ID:" << this->mID << " Age:" << this->mAge << endl;}public:int mAge;mutable int mID;
};void test(){	const Person person;//1. 可访问数据成员cout << "Age:" << person.mAge << endl;//person.mAge = 300; //不可修改person.mID = 1001; //但是可以修改mutable修饰的成员变量//2. 只能访问const修饰的函数//person.ShowPerson();person.ChangePerson();
}

不能直接修改, 但是可以通过指针间接修改。

相关文章:

  • html中一个div中平均一行分配四个盒子,可展开与收起所有的盒子
  • 定时器TIM HAL库+cubeMX(上)
  • PaddleClas学习3——使用PPLCNet模型对车辆朝向进行识别(c++)
  • 安装LLaMA-Factory微调chatglm3,修改自我认知
  • 奥比中光 Femto Bolt相机ROS配置
  • strtok()的用法及实现哦
  • 逻辑回归的介绍和应用
  • es模板和索引简单操作简介
  • rust宏(macro)详解
  • Selenium+Unittest+HTMLTestRunner框架更改为Selenium+Pytest+Allure(一)
  • Sui承诺向流动性质押协议投入$SUI
  • TimescaleDB-1 安装
  • 3D渲染和动画制作软件KeyShot Pro mac附加功能
  • CRM客户管理系统-超详细介绍
  • 机器人视觉
  • 《网管员必读——网络组建》(第2版)电子课件下载
  • 【5+】跨webview多页面 触发事件(二)
  • angular2 简述
  • Intervention/image 图片处理扩展包的安装和使用
  • JavaScript服务器推送技术之 WebSocket
  • javascript面向对象之创建对象
  • miniui datagrid 的客户端分页解决方案 - CS结合
  • sublime配置文件
  • Vue.js 移动端适配之 vw 解决方案
  • 给新手的新浪微博 SDK 集成教程【一】
  • 基于Volley网络库实现加载多种网络图片(包括GIF动态图片、圆形图片、普通图片)...
  • 深入浏览器事件循环的本质
  • - 转 Ext2.0 form使用实例
  • d²y/dx²; 偏导数问题 请问f1 f2是什么意思
  • 阿里云服务器购买完整流程
  • ​无人机石油管道巡检方案新亮点:灵活准确又高效
  • $con= MySQL有关填空题_2015年计算机二级考试《MySQL》提高练习题(10)
  • $Django python中使用redis, django中使用(封装了),redis开启事务(管道)
  • (11)MATLAB PCA+SVM 人脸识别
  • (day 12)JavaScript学习笔记(数组3)
  • (done) ROC曲线 和 AUC值 分别是什么?
  • (LeetCode 49)Anagrams
  • (LeetCode C++)盛最多水的容器
  • (附源码)springboot 个人网页的网站 毕业设计031623
  • (附源码)ssm基于jsp的在线点餐系统 毕业设计 111016
  • (企业 / 公司项目)前端使用pingyin-pro将汉字转成拼音
  • .NET Core使用NPOI导出复杂,美观的Excel详解
  • .NET Framework .NET Core与 .NET 的区别
  • .net MySql
  • .NET Remoting Basic(10)-创建不同宿主的客户端与服务器端
  • .Net 高效开发之不可错过的实用工具
  • .NET业务框架的构建
  • [100天算法】-目标和(day 79)
  • [2016.7.Test1] T1 三进制异或
  • [BZOJ] 2044: 三维导弹拦截
  • [BZOJ1008][HNOI2008]越狱
  • [C++]指针与结构体
  • [COI2007] Sabor
  • [element-ui] el-dialog 中的内容没有预先加载,因此无法获得内部元素的ref 的解决方案
  • [hdu 2896] 病毒侵袭 [ac自动机][病毒特征码匹配]