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

【C++】 常对象与常函数

常函数:

  • 成员函数后加const后我们称为这个函数为常函数
  • 常函数内不可以修改成员属性
  • 成员属性声明时加关键字mutable后,在常函数中依然可以修改

常对象:

  • 声明对象前加const称该对象为常对象
  • 常对象只能调用常函数


一、this指针本质

this指针的本质是一个指针常量,Person * const this。const修饰的是 “this”, 指针的值不可以改,即指针的指向不可以改,但指针指向的对象的值可以改。

在这里插入图片描述

成员函数ShowPerson的定义是:

void ShowPerson()  {//this = NULL;     	// 指针的指向不可以改,this = NULL非法。this->m_B = 100;	// 指针指向的对象的值可以改,合法。
}

c++把它处理为:

//this指针的本质是一个指针常量,指针的指向不可修改
//Person * const this = &p
void Person :: ShowPerson(Person * this)  {//this = NULL;     	// 指针的指向不可以改,this = NULL非法。this->m_B = 100;	// 指针指向的对象的值可以改,合法。
}

实际的调用方式为:

Person p;p.ShowPerson(&p);



二、常函数

ShowPerson() 函数后面添加 const 关键字,const Person * const this ,是指向常量的常量指针。指针的指向不可以改,指针指向的值也不可以改。

在这里插入图片描述

常成员函数可以访问常对象中的数据成员,但仍不允许修改常对象中数据成员的值。

class Person {
public://如果想让指针指向的值也不可以修改,需要声明常函数//const  Person * const thisvoid ShowPerson()  const{this = NULL;			// 指针的指向不可以改this->m_B = 100;		// 指针的指向对象的值也不可以改}public:int m_A;int m_B; //可修改 可变的
};void test01() {Person p; p.ShowPerson();
}



三、mutable关键字

加mutable关键字,即使在常函数中,也可以修改这个值。

在这里插入图片描述

class Person {
public://const  Person * const thisvoid ShowPerson()  const{this = NULL;this->m_B = 100;		}public:int m_A;mutable int m_B; // 加mutable关键字,即使在常函数中,也可以修改这个值。
};



四、常对象

加mutable关键字,即使在常对象中,也可以修改这个值。

在这里插入图片描述

class Person {
public://const  Person * const thisvoid ShowPerson()  const{this = NULL;this->m_B = 100;		}public:int m_A;mutable int m_B;	// 加mutable关键字,即使在常函数中,也可以修改这个值。
};//const修饰对象  常对象
void test02() {const Person p;		// 常量对象  p.m_B = 100;		// 加mutable关键字,即使在常对象中,也可以修改这个值。p.m_A = 100;	
}



五、常对象只能调用常函数

常对象 不可以调用普通成员函数,因为普通成员函数可以修改属性。

在这里插入图片描述

class Person {
public://const  Person * const thisvoid ShowPerson()  const{	this = NULL;this->m_B = 100;		}void func() {m_A = 100;		// 如果常对象能调用这个普通函数,那么就可以间接地修改常对象的属性,矛盾。}public:int m_A;mutable int m_B;	// 加mutable关键字,即使在常函数中,也可以修改这个值。
};// const修饰对象,表示一个只读状态  常对象本身不可以修改属性  
void test03() {const Person p;		// 常对象p.ShowPerson();		// 常对象只能调用常成员函数。p.func();			// 常对象 不可以调用普通成员函数,因为普通成员函数可以修改属性。
}




相关文章:

【C++】 常对象与常函数

常函数: 成员函数后加const后我们称为这个函数为常函数常函数内不可以修改成员属性成员属性声明时加关键字mutable后,在常函数中依然可以修改 常对象: 声明对象前加const称该对象为常对象常对象只能调用常函数 一、this指针本质 this指针…...

Elasticsearch 集群分片出现 unassigned 其中一种原因详细还原

🏡 个人主页:IT贫道_大数据OLAP体系技术栈,Apache Doris,Clickhouse 技术-CSDN博客 🚩 私聊博主:加入大数据技术讨论群聊,获取更多大数据资料。 🔔 博主个人B栈地址:豹哥教你大数据的个人空间-豹…...

Java调用HTTPS接口,绕过SSL认证

1:说明 网络编程中,HTTPS(Hypertext Transfer Protocol Secure)是一种通过加密的方式在计算机网络上进行安全通信的协议。网络传输协议,跟http相比更安全,因为他加上了SSL/TLS协议来加密通信内容。 Java调…...

前端小技巧: TS实现数组转树,树转数组

将数组转为树 interface IArrayItem {id: number,name: string,parentId: number }interface ITreeNode {id: numbername: stringchildren?: ITreeNode[] }const arr [{id: 1, name: 部门A, parentId: 0},{id: 2, name: 部门B, parentId: 1},{id: 3, name: 部门C, parentId:…...

谷歌动态搜索广告被滥用引发恶意软件泛滥

研究人员发现了一种新方法,可以利用易受攻击的网站向搜索引擎用户发送恶意的、有针对性的广告,这种方法能够传播大量恶意软件,使受害者完全不知所措。 关键是“动态搜索广告”,谷歌利用网站登陆页面的内容将目标广告与搜索配对的…...

C语言实现 1.在一个二维数组中形成 n 阶矩阵,2.去掉靠边元素,生成新的 n-2 阶矩阵;3.求矩阵主对角线下元素之和:4.以方阵形式输出数组。

矩阵形式: 1 1 1 1 1 2 1 1 1 1 3 2 1 1 1 4 3 2 1 1 5 4 3 2 1 完整代码: /*编写以下函数 1.在一个二维数组中形成如以下形式的 n 阶矩阵: 1 1 1 1 1 2 1 1 1 1 3 2 1 1 1 4 3 2 1 1 5 4 3 2 1 2.去掉…...

我在Vscode学OpenCV 处理图像

既然我们是面向Python的OpenCV(OpenCV for Python)那我们就必须要熟悉Numpy这个库,尤其是其中的数组的库,Python是没有数组的,唯有借助他库才有所实现想要的目的。 # 老三样库--事先导入 import numpy as np import c…...

【python】路径管理+路径拼接问题

路径管理 问题相对路径问题绝对路径问题 解决os库pathlib库最终解决 问题 环境:python3.7.16 win10 相对路径问题 因为python的执行特殊性,使用相对路径时,在不同路径下用python指令会有不同的索引效果(python的项目根目录根据执…...

C现代方法(第16章)笔记——结构、联合和枚举

文章目录 第16章 结构、联合和枚举16.1 结构变量16.1.1 结构变量的声明16.1.2 结构变量的初始化16.1.3 指示器(C99)16.1.4 对结构的操作 16.2 结构类型16.2.1 结构标记的声明16.2.2 结构类型的定义16.2.3 结构作为参数和返回值16.2.4 复合字面量(C99)16.2.5 匿名结构(C1X) 16.3…...

Python项目——识别指定物品

目录 1、百度EasyDL平台数据配置 1.1、训练图像上传 1.2、训练图像进行标注 1.3、训练模型 1.4、检验识别 1.5、申请发布 1.6、控制台权限配置 2、Python调用物体识别API 本项目是基于百度EasyDL平台制作的识别转盘内瓶子,且识别瓶子位置的一个项目。通过在…...

Spring-创建非懒加载的单例Bean源码

补充&#xff1a;关于扫描的逻辑 /*** Scan the class path for candidate components.* param basePackage the package to check for annotated classes* return a corresponding Set of autodetected bean definitions*/ public Set<BeanDefinition> findCandidateCo…...

Techlink TL24G06 网络变压器 10G 基座单端口变压器

功能特征&#xff1a; 1、符合IEEE 802.3标准。 2、符合RoHS。 3、工作温度范围&#xff1a;0C至70C。 4、储存温度范围&#xff1a;-20C至125C。...

Python操作PDF:PDF文件合并与PDF页面重排

处理大量的 PDF 文档是非常麻烦的事情&#xff0c;频繁地打开关闭文件会严重影响工作效率。对于一大堆内容相关的 PDF 文件&#xff0c;我们在处理时可以将这些 PDF 文件合并起来&#xff0c;作为单一文件处理&#xff0c;从而提高处理效率。同时&#xff0c;我们也可以选取不同…...

删除链表的倒数第n个节点(C++解法)

题目 给你一个链表&#xff0c;删除链表的倒数第 n 个结点&#xff0c;并且返回链表的头结点。 示例 1&#xff1a; 输入&#xff1a;head [1,2,3,4,5], n 2 输出&#xff1a;[1,2,3,5]示例 2&#xff1a; 输入&#xff1a;head [1], n 1 输出&#xff1a;[]示例 3&#…...

Apache服务的搭建与配置(超详细版)

前言 Apache是一种常见的Web服务器软件&#xff0c;广泛用于Linux和其他UNIX操作系统上。它是自由软件&#xff0c;可以通过开放源代码的方式进行自由分发和修改。Apache提供了处理静态和动态内容的能力&#xff0c;而且还支持多种编程语言和脚本&#xff0c;如PHP、Python和P…...

设计模式大赏(一):桥接模式,组合模式

设计模式大赏&#xff08;一&#xff09;&#xff1a;桥接模式&#xff0c;组合模式 导言 本篇文章是设计模式大赏中的第一篇文章&#xff0c;这个系列的文章中我们主要将介绍一些常见的设计模式&#xff0c;主要是我在看Android源码中发现用到的一些设计模式。本篇文章将主要…...

数据通信——应用层(DHCP的原理与配置)

引言 假如我们的网络中有N台设备&#xff0c;它们都要设置IP地址&#xff0c;如果人工去一个个配置不仅不方便管理还很麻烦。因此我们用DHCP来自动分配地址。 一&#xff0c;系统的启动流程 不仅是计算机、很多网络设备的启动流程如下&#xff1a; 设备上电后&#xff0c;硬件…...

力扣151.反转字符串中的单词

原题链接&#xff1a;力扣151.反转字符串中的单词 全代码&#xff1a; 需要复刷 class Solution { public:void reverse(string& s, int start, int end){ //翻转&#xff0c;区间写法&#xff1a;左闭右闭 []for (int i start, j end; i < j; i, j--) {swap(s[i],…...

vim三种模式,文本操作(操作字符/光标,列出行号可视化块模式/多文件查看)

目录 vim--文本编辑器 功能 基本概念 命令/默认模式 插入模式 底行模式 文本操作 引入 移动光标位置 删除字符 -- x/dd 复制/粘贴字符 -- yw/yyp 替换文本 -- r / %s 底行模式 全局替换 -- /g 撤销操作 -- u / ctrlr 修改字符 -- cw 示例 跳行 -- ctrlg 底行…...

jquery控制easyui中combobox、textbox显示隐藏

//combobox下拉框 $("#下拉框id.combo").hide();//textbox输入框 $("#输入框id.textbox").hide(); 参考网址&#xff1a; https://blog.csdn.net/Coldmood/article/details/128279727...

避开这3个坑,你的LVGL界面动画才能流畅不卡顿:定时器使用避坑指南

避开这3个坑&#xff0c;你的LVGL界面动画才能流畅不卡顿&#xff1a;定时器使用避坑指南 在嵌入式GUI开发中&#xff0c;流畅的动画效果往往能大幅提升用户体验。但很多开发者在使用LVGL定时器实现动画时&#xff0c;常会遇到界面卡顿、响应迟缓的问题。这通常不是LVGL本身的问…...

qobuz-dl:无损音乐下载的技术革命与实践指南

qobuz-dl&#xff1a;无损音乐下载的技术革命与实践指南 【免费下载链接】qobuz-dl A complete Lossless and Hi-Res music downloader for Qobuz 项目地址: https://gitcode.com/gh_mirrors/qo/qobuz-dl 在数字音乐时代&#xff0c;音乐爱好者面临着一个永恒的矛盾&…...

wan2.1-vae效果可视化对比:同一提示词下1024×1024 vs 2048×2048细节放大实测

wan2.1-vae效果可视化对比&#xff1a;同一提示词下10241024 vs 20482048细节放大实测 你肯定遇到过这种情况&#xff1a;用AI生成了一张图&#xff0c;乍一看挺不错&#xff0c;但放大一看&#xff0c;细节就糊了&#xff0c;或者充满了奇怪的噪点和扭曲。尤其是在需要高清大…...

【learn-claude-code】S08BackgroundTasks - 后台任务:慢操作放后台,Agent 继续思考

核心理念 “慢操作放后台&#xff0c;Agent 继续思考” – 后台线程执行命令&#xff0c;完成后通知模型。 源码&#xff1a;https://github.com/xiayongchao/learn-claude-code-4j/blob/main/src/main/java/org/jc/agents/S08BackgroundTasks.java原版&#xff1a;https://g…...

3分钟学会在Blender中安装和使用VRM插件:从零到精通完整指南

3分钟学会在Blender中安装和使用VRM插件&#xff1a;从零到精通完整指南 【免费下载链接】VRM-Addon-for-Blender VRM Importer, Exporter and Utilities for Blender 2.93 to 5.0 项目地址: https://gitcode.com/gh_mirrors/vr/VRM-Addon-for-Blender VRM Addon for Bl…...

告别字体授权困局:思源宋体CN开源解决方案的全场景应用指南

告别字体授权困局&#xff1a;思源宋体CN开源解决方案的全场景应用指南 【免费下载链接】source-han-serif-ttf Source Han Serif TTF 项目地址: https://gitcode.com/gh_mirrors/so/source-han-serif-ttf 在数字化创作领域&#xff0c;中文字体选择长期面临"三重困…...

OpenClaw+百川2-13B-4bits:个人博客内容自动生成与发布方案

OpenClaw百川2-13B-4bits&#xff1a;个人博客内容自动生成与发布方案 1. 为什么需要自动化博客工作流 作为一个坚持写了5年技术博客的开发者&#xff0c;我深知内容创作的痛点&#xff1a;灵感转瞬即逝&#xff0c;写作耗时费力&#xff0c;排版发布流程繁琐。每次从灵感到最…...

gte-base-zh效果惊艳:中文歌词风格迁移与语义相似度混合推荐

gte-base-zh效果惊艳&#xff1a;中文歌词风格迁移与语义相似度混合推荐 重要提示&#xff1a;本文所有内容仅供技术学习交流&#xff0c;严禁用于任何商业用途或违法活动。使用即表示同意自行承担所有责任。 1. 快速了解gte-base-zh模型 gte-base-zh是阿里巴巴达摩院训练的中…...

灵感画廊实际作品:基于‘纪实瞬间’预设的城市街景写实图像生成

灵感画廊实际作品&#xff1a;基于‘纪实瞬间’预设的城市街景写实图像生成 “见微知著&#xff0c;凝光成影。将梦境的碎片&#xff0c;凝结为永恒的视觉诗篇。” 今天&#xff0c;我们不谈复杂的参数&#xff0c;也不讲枯燥的部署。我想带你走进一个特别的创作空间——灵感画…...

第一篇:KNX入门实战|从协议基础到开发环境搭建,新手也能轻松上手

在智能楼宇与工业自动化领域&#xff0c;KNX协议绝对是绕不开的核心标准——作为全球通用的开放式楼宇控制协议&#xff08;ISO/IEC 14543&#xff09;&#xff0c;它融合了欧洲三大总线协议的优势&#xff0c;能实现照明、空调、传感器等各类设备的无缝联动&#xff0c;广泛应…...