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.mzph.cn/news/175472.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【开题报告】基于uniapp的瑜伽学习交流小程序的设计与实现

1.选题背景 瑜伽在现代社会中越来越受到人们的关注和喜爱。它不仅可以帮助人们塑造健美的身材&#xff0c;还能促进身心健康、提高生活质量。然而&#xff0c;由于瑜伽动作的复杂性和技巧性&#xff0c;很多初学者在学习过程中会遇到困难和挑战。 同时&#xff0c;由于工作和…

3-docker-基于ubuntu镜像构建redis镜像

第一步&#xff1a;编辑Dockerfile 第二步&#xff1a;执行命令构建镜像 第三步&#xff1a;查看构建完成的镜像 第四步&#xff1a;镜像运行成容器 第五步&#xff1a;查看正在运行的容器 第六步&#xff1a;进入到容器 第一步&#xff1a;编辑Dockerfile vi Dockerfile# 写入…

云原生实战课大纲<2>

我们pod的数据挂载文件可以使用 pv-pvc的方式 1. 创建pv池 2. 在pv池中创建pv&#xff0c;并且设置pv的模式 3. 编写pod 写对应的pvc 申请书 就可以了这就是我们k8s中的pv和pvc 基于pv池创建pv的时候会有容量限制呢么关于配置呢&#xff0c;我们以前会有这种场景 比如说在dock…

Java之API(上):Character

一、前言&#xff1a; 我们上次讲到 java.lang.*下的八大包装类&#xff1a; 八大包装类 基本数据类型byteshortintlongfloatdoublecharboolean引用数据类型(对象)ByteShortIntegerLongFloatDoubleCharacterBoolean 之前讲到了比较常用的Integer包装类&#xff0c;但是前面6个包…

文件夹重命名:克服语言障碍,批量将中文文件夹名翻译成英文

随着全球化的不断深入&#xff0c;英语成为了世界上最广泛使用的语言。在日常生活和工作中&#xff0c;可能经常要将中文文件夹名翻译成英文&#xff0c;以便交流或满足特定需求。手动翻译文件夹名不仅耗时&#xff0c;还容易出错。那有什么方法可以快速、准确地批量将中文文件…

力扣 965. 单值二叉树

目录 1.解题思路2.代码实现 1.解题思路 如果一个结点的子节点与其相同&#xff0c;那么就沿着子节点进行遍历. 2.代码实现 bool isUnivalTree(struct TreeNode* root){ if(rootNULL)return true;if(root->left){if(root->val!root->left->val||!isUnivalTree(ro…

2T以上的硬盘需要转GPT格式再分区

在大多数老旧的系统上&#xff0c;你可能遇到了MBR&#xff08;Master Boot Record&#xff09;分区表的限制&#xff0c;它最大支持2TB的分区。这解释了为什么你的逻辑卷无法创建超过2TB的分区。 为了支持超过2TB的分区&#xff0c;你需要使用GPT&#xff08;GUID Partition …

RT-DETR算法优化改进:AKConv(可改变核卷积),即插即用的卷积,效果秒杀DSConv | 2023年11月最新发表

💡💡💡本文全网首发独家改进:可改变核卷积(AKConv),赋予卷积核任意数量的参数和任意采样形状,为网络开销和性能之间的权衡提供更丰富的选择,解决具有固定样本形状和正方形的卷积核不能很好地适应不断变化的目标的问题点,效果秒殺DSConv 1)AKConv替代标准卷积进行…

基于可微分渲染器的相机位置优化【PyTorch3D】

在这个教程中&#xff0c;我们将使用可微渲染学习给定参考图像的相机的 [x, y, z] 位置。 我们将首先使用相机的起始位置初始化渲染器。 然后&#xff0c;我们将使用它来生成图像&#xff0c;使用参考图像计算损失&#xff0c;最后通过整个管道进行反向传播以更新相机的位置。…

Django创建基本的app应用并配置URL路径-成功运行服务

开发环境&#xff1a;Pycharm2021 Win11 首先创建虚拟环境: 可参考&#xff1a; Pycharm开发环境下创建python运行的虚拟环境&#xff08;自动执行安装依赖包&#xff09;_pycharm自动下载依赖包_heda3的博客-CSDN博客 1、安装 Django 在虚拟环境下安装pip install django …

从容应对高并发:RabbitMQ与消息限流策略的完美结合

在当今互联网时代&#xff0c;高并发访问已成为许多应用系统面临的常见挑战之一。对于需要处理大量请求的系统来说&#xff0c;如何保证系统的稳定性和可靠性是一个关键问题。RabbitMQ作为一种可靠的消息队列中间件&#xff0c;可以帮助解决高并发环境下的消息处理问题。而结合…

JAXB的XmlAttribute注解

JAXB的XmlAttribute注解&#xff0c;将一个JavaBean属性映射到一个XML属性。 例如&#xff0c;下面的Java代码&#xff0c;将属性currency映射到了XML的属性currency&#xff1a; package com.thb;import jakarta.xml.bind.annotation.XmlAttribute; import jakarta.xml.bind…

Python中元组的不变性与包含可变列表的矛盾之美

在Python中&#xff0c;元组&#xff08;tuple&#xff09;被广泛使用&#xff0c;它是一种不可变的数据结构&#xff0c;一旦创建&#xff0c;其元素无法被修改。然而&#xff0c;有趣的是&#xff0c;元组内部可以包含可变的列表。这种看似矛盾的设计其实为编程提供了一种灵活…

docker基础快速入门:基础命令、网络、docker compose工具

docker基础命令快速入门 目录 docker基本命令docker 网络docker compose Docker介绍 Docker是一个虚拟环境容器&#xff0c;可以将你的开发环境、代码、配置文件等一并打包到这个容器中&#xff0c;并发布和应用到任意平台中。 Docker的三个概念 镜像 Docker镜像是一个特…

自己动手写编译器:golex 和 flex 比较研究 2

上一节我们运行了 gcc 使用的词法解析器&#xff0c;使用它从.l 文件中生成对应的词法解析程序。同时我们用相同的词法规则对 golex 进行测试&#xff0c;发现 golex 同样能实现相同功能&#xff0c;当然这个过程我们也发现了 golex 代码中的不少 bug&#xff0c;本节我们继续对…

gorm 集成opentelemetry

服务端代码&#xff1a; package mainimport ("GoStart/telemetry/ch03/server/model""github.com/gin-gonic/gin""go.opentelemetry.io/contrib/instrumentation/github.com/gin-gonic/gin/otelgin""go.opentelemetry.io/otel""…

【Linux】23、内存超详细介绍

文章目录 零、资料一、内存映射1.1 TLB1.2 多级页表1.3 大页 二、虚拟内存空间分布2.1 用户空间的段2.2 内存分配和回收2.2.1 小对象2.2.2 释放 三、查看内存使用情况3.1 Buffer 和 Cache3.1.1 proc 文件系统3.1.2 案例3.1.2.1 场景 1&#xff1a;磁盘和文件写案例3.1.2.2 场景…

【数据结构】顺序表---C语言版

【数据结构】顺序表 前言&#xff1a;一、线性表二、顺序表1.顺序表的概念及结构&#xff1a;2.顺序表的分类&#xff1a;3.顺序表缺陷&#xff1a; 三、顺序表的代码实现&#xff1a;1.头文件&#xff1a;2.函数文件&#xff1a;3.测试文件&#xff1a; 四、顺序表的相关OJ题&…

怎么给数据库某个字段建立一个前缀索引

说明&#xff1a;SQL调优中重要的一个环节是建立索引&#xff0c;其中有一条是字段值过长字段应该建立前缀索引&#xff0c;即根据字段值的前几位建立索引&#xff0c;像数据库中的密码字段、UUID字段。 因为其随机性&#xff0c;其实根据前几位就可以锁定某一条记录了。前缀索…

(附源码)SSM+成都大学体育场馆预约系统 计算机毕设37087

摘 要 21世纪的今天&#xff0c;随着社会的不断发展与进步&#xff0c;人们对于信息科学化的认识&#xff0c;已由低层次向高层次发展&#xff0c;由原来的感性认识向理性认识提高&#xff0c;管理工作的重要性已逐渐被人们所认识&#xff0c;科学化的管理&#xff0c;使信息存…