【C++初阶】类与对象(中)之取地址及const取地址操作符重载(了解即可)

👦个人主页:@Weraphael
✍🏻作者简介:目前学习C++和算法
✈️专栏:C++航路
🐋 希望大家多多支持,咱一起进步!😁
如果文章对你有帮助的话
欢迎 评论💬 点赞👍🏻 收藏 📂 加关注✨
目录
- 一、const成员
- 二、取地址及const取地址操作符重载
- 2.1 特殊使用情况
一、const成员
将
const修饰的“成员函数”称之为const成员函数,const修饰类成员函数,实际修饰该成员函数隐含的this指针,表明在该成员函数中不能对类的任何成员进行修改。
我们来看看下面的代码:
#include <iostream>
using namespace std;class Date
{
public:Date(int year, int month, int day){Year = year;Month = month;Day = day;}void Print(Date* const this){cout << Year << "-" << Month << '-' << Day << endl;}private:int Year; int Month; int Day;
};int main()
{Date d1(2023, 5, 20);d1.Print();const Date d2(2023, 5, 21);d2.Print();return 0;
}

- 以上代码对于
d2是编译不通过的,这是为什么呢?
- 当对象
d1调用成员函数this指针来访问该对象的成员变量和成员函数。this指针的类型:类名* const this,const修饰this,即成员函数中,不能修改this指针;- 而对于对象
d2,当调用成员函数时,编译器同样会自动将该对象作为第一个参数传递给成员函数,但不同的是,由于const修饰d2,因此this指针的类型应该是const Date* const this,因此不能给*this赋值,所以导致了报错。
因此,为了解决以上问题。C++是允许在函数后加上一个const,这样就能正常运行了:
#include <iostream>
using namespace std;class Date
{
public:Date(int year, int month, int day){Year = year;Month = month;Day = day;}void Print() const{cout << this->Year << "-" << this->Month << '-' << this->Day << endl;}private:int Year; int Month; int Day;
};int main()
{Date d1(2023, 5, 20);d1.Print();const Date d2(2023, 5, 21);d2.Print();return 0;
}
【程序结果】

【总结】
- 成员函数在后加上
const后,普通和const修饰的对象都能用。- 但注意:由于
const修饰的对象,其形参中的*this被const修饰,也就说明不能对*this进行修改。因此,如果成员函数内要修改对象成员变量的函数千万不要用const修饰对象。- 如果声明和定义分离,声明的函数和定义的函数都要加
const
二、取地址及const取地址操作符重载
首先先来看看一下代码:
#include <iostream>
using namespace std;class Date
{
public:Date(int year = 1, int month = 1, int day = 1){Year = year;Month = month;Day = day;}
private:int Year; int Month; int Day;
};int main()
{Date d1(2023, 5, 20);const Date d2(2023, 5, 21);cout << &d1 << endl;cout << &d2 << endl;return 0;
}
【程序结果】

通过以上结果我们发现:
const取地址操作符重载不用重新定义,编译器默认会生成。
当然,如果想自己定义也是可以的,代码如下:
#include <iostream>
using namespace std;class Date
{
public:Date(int year = 1, int month = 1, int day = 1){Year = year;Month = month;Day = day;}Date* operator&(){return this;}const Date* operator&() const{return this;}private:int Year; int Month; int Day;
};int main()
{Date d1(2023, 5, 20);const Date d2(2023, 5, 21);cout << &d1 << endl;cout << &d2 << endl;return 0;
}
【程序结果】

需要注意的是:重载
const取地址操作符时,返回的指针类型必须是const指针,否则会导致编译错误。
2.1 特殊使用情况
虽然这两个运算符一般不需要重载,使用编译器生成的默认取地址的重载即可,只有特殊情况,才需要重载,比如 不想让别人获取到指定的内容
#include <iostream>
using namespace std;class Date
{
public:Date(int year = 1, int month = 1, int day = 1){Year = year;Month = month;Day = day;}Date* operator&(){return nullptr;}const Date* operator&() const{return nullptr;}
private:int Year; int Month; int Day;
};int main()
{Date d1(2023, 5, 20);const Date d2(2023, 5, 21);cout << &d1 << endl;cout << &d2 << endl;return 0;
}
【程序结果】

相关文章:
【C++初阶】类与对象(中)之取地址及const取地址操作符重载(了解即可)
👦个人主页:Weraphael ✍🏻作者简介:目前学习C和算法 ✈️专栏:C航路 🐋 希望大家多多支持,咱一起进步!😁 如果文章对你有帮助的话 欢迎 评论💬 点赞…...
代驾公司如何管理司机
在这个几乎人人都能学车,人人都能开车的时代,代驾职业也越来越专业化和正规化。因此,想要成为一名优秀的代驾司机,一定得有过人之处,对于代驾公司来说,如何管理司机也是尤为的重要。 对于代驾公司来说&…...
面了一个5年经验的测试工程师,自动化都不会也敢喊了16k,我也是醉了····
在深圳这家金融公司也待了几年,被别人面试过也面试过别人,大大小小的事情也见识不少,今天又是团面的一天, 一百多个人都聚集在一起,因为公司最近在谈项目出来面试就2个人,无奈又被叫到面试房间。 整个过程…...
ChatGPT:你真的了解网络安全吗?浅谈攻击防御进行时之网络安全新定义
ChatGPT:你真的了解网络安全吗?浅谈网络安全攻击防御进行时 网络安全新定义总结 ChatGPT(全名:Chat Generative Pre-trained Transformer),美国OpenAI 研发的聊天机器人程序,是人工智能技术驱动…...
LeetCode_DFS_困难_1377.T 秒后青蛙的位置
目录 1.题目2.思路3.代码实现(Java) 1.题目 给你一棵由 n 个顶点组成的无向树,顶点编号从 1 到 n。青蛙从 顶点 1 开始起跳。规则如下: 在一秒内,青蛙从它所在的当前顶点跳到另一个未访问过的顶点(如果它…...
第四十九天学习记录:C语言进阶:结构体
结构体 结构体的声明 结构是一些值的集合,这些值称为成员变量。结构的每个成员可以是不同类型的变量 struct tag {member-list; }variable-list;问:C的new和C语言的结构体有什么异同? ChatAI答: C中的new是一个运算符ÿ…...
LeeCode [N字形变换]算法解析
关键字:数学归纳法 一、题目 将一个给定字符串 s 根据给定的行数 numRows ,以从上往下、从左到右进行 Z 字形排列。 比如输入字符串为 "PAYPALISHIRING" 行数为 3 时,排列如下: P A H N A P L S I I G Y I R …...
CPU性能提升:流水线
一条指令的执行一般要经过取指令,翻译指令,执行指令3个基本流程。CPU内部的电路分为不同的单元,取指但愿,译码单元,执行单元等。指令的执行也是按照流水线工序一步步执行的。如图2-34所示,我们假设每一个步…...
C语言指针初级
目录 一、什么是指针 二、指针和指针类型 三、野指针 1.野指针的成因: 2.如何规避野指针 四、指针运算 1.指针-整数 2. 指针之间的加减 五、二级指针 六、指针数组 一个男人,到底要走多少的路,才能成为一个真正的男人 本专栏适用于…...
C++的历史
C是一种广泛使用的编程语言。C于1983年由丹尼斯里奇(Dennis Ritchie)在贝尔实验室创造,它是C语言的扩展。C的设计初衷是为了提高代码的可重用性和可维护性。它允许开发人员使用面向对象编程(OOP)范例,这使得…...
保姆级别!!!--全网绝对教你会!!教你如何使用MQTTFX连接阿里云平台中的设备----下期告诉你如何创建!
本期需要下载的软件 MQttfx安装包,本人打包的-嵌入式文档类资源-CSDN文库 目录 第一步:建造阿里云设备 这个可以先忽略建造步骤,下期将提供步骤。 第二步:下载mqttfx软件 第三步:填写密钥信息进行连接 查看三元…...
Unexpected token ‘‘‘, “‘{“type“:““... is not valid JSON
尝试低代码schema解析JSON时报错,奇怪的是控制台解析正常,项目js执行JSON.parse()报错,简直无语了,,, 只能挨个检查了,首先温习了下JSON 的标准格式: JSON的合法符号:{(左大括号) }(右大括号) "(双引号) :(冒号) ,(逗号) [(左中括号) ](右中括号) JSON字符串:…...
关于C语言的杂记5
文章目录 引入正文内部函数与外部函数相关数组的知识点数组的初始化测试一维数组在内存中存储的地址:遍历二维数组的值测试二维数组的地址(观察内存情况)数组下标为0开始的由来 两个数交换位置的三种方法 引入 写在前面:关于C语言这部分内容,…...
YOLOv5 vs YOLOv6 vs YOLOv7目标检测模型速度和准确度的性能比较——深入研究
如果您正在进行目标检测项目,您很可能会选择众多 YOLO 模型中的一种。从现有的 YOLO 对象检测模型的数量来看,如何选择最佳模型是一个艰难的选择。 您可能会发现自己正在考虑: 选择哪种 YOLO 模型以获得最佳 FPS? CPU 与 GPU 的推理速度如何?选择哪种 GPU?微型、小型、…...
如何增加网站权重?有效提高网站权重的技巧方法
权重对于网站优化来说非常的重要,那什么是网站权重呢?网站权重是指搜索引擎给网站(包括网页)赋予一定的权威值,对网站(含网页)权威的评估评价。一个网站权重越高,在搜索引擎所占的份…...
路径规划 | 图解快速随机扩展树RRT算法(附ROS C++/Python/Matlab仿真)
目录 0 专栏介绍1 什么是RRT算法?2 图解RRT算法原理3 算法仿真与实现3.1 ROS C++实现3.2 Python实现3.3 Matlab实现0 专栏介绍 🔥附C++/Python/Matlab全套代码🔥课程设计、毕业设计、创新竞赛必备!详细介绍全局规划(图搜索、采样法、智能算法等);局部规划(DWA、APF等);…...
【Stable Diffusion WebUI】一篇文章教你如何安装和使用Stable Diffusion WebUI
文章目录 Stable Diffusion WebUI1. 安装1.1 下载 stable-diffusion-webui1.2 运行 webui.sh 2. 安装插件2.1 命令行安装2.2 extensions 安装2.3 常用插件 3. 使用教程3.1 页面布局3.3 快捷栏设置3.3.1 PNG Info3.3.2 Tagger Stable Diffusion WebUI 1. 安装 1.1 下载 stable…...
Python篇——数据结构与算法(第二部分)
目录 二、排序算法(承接第一部分) 1、堆排序算法——树的基础知识补充 2、树的基本概念 3、二叉树基础知识 (1)满二叉树 (2)完全二叉树 (3)二叉树的存储方式(表示方式…...
人工智能之读懂CNN卷积神经网络
通过往期文章的分享,我们了解了神经网络的结构,一般分为输入层,隐藏层,输出层 TensorFlow神经网络 那什么是卷积神经网络那,这就要我们追溯一下人类识别图像的原理 人类的视觉原理如下:从原始信号摄入开始(瞳孔摄入像素 Pixels),接着做初步处理(大脑皮层某些细胞发现…...
go手写Redis(1)之协议说明
手写Redis 参考大佬的go实现redis,自己实现一个简单版本的用于学习go以及网络编程相关 https://github.com/HDT3213/godis https://coding.imooc.com/class/576.html #慕课网课程 源码地址: https://gitee.com/haijun1998/go_redis RESP协议 Redis Ser…...
效率提升神器:用快马AI自动诊断并修复npm 128错误,节省排错时间
效率提升神器:用快马AI自动诊断并修复npm 128错误,节省排错时间 最近在团队协作开发一个Node.js项目时,频繁遇到npm安装依赖报错128的问题。每次都要花大量时间排查SSH配置、网络代理或仓库源的问题,严重影响了开发效率。于是我开…...
GTE中文向量模型实战教程:基于test_uninlu.py扩展支持中文繁体与简体兼容测试
GTE中文向量模型实战教程:基于test_uninlu.py扩展支持中文繁体与简体兼容测试 1. 引言:当GTE模型遇上中文繁简转换 如果你正在使用GTE中文向量模型处理文本,可能会遇到一个不大不小的麻烦:用户输入的文本,有时是简体中…...
YOLOv11的PTQ(训练后静态量化)实战:从浮点到整型的性能突围
一、深夜的显存告警 上周三凌晨两点,手机突然连续震动——生产环境服务器显存超限告警。跑到监控面板一看,部署的YOLOv11模型在峰值请求时段显存占用直接飙到8G以上,导致相邻服务被OOM Killer强制终止。这已经是本月第三次了。浮点模型在边缘…...
实战起步:基于快马ai生成集成openclaw的windows自动化监控项目脚手架
实战起步:基于快马AI生成集成OpenClaw的Windows自动化监控项目脚手架 最近在做一个网络资源监控的小项目,需要在Windows环境下使用OpenClaw工具。作为一个经常被环境配置折磨的开发者,这次尝试用InsCode(快马)平台来生成完整的项目脚手架&am…...
Python CGI编程:从历史原理到现代启示
1. CGI技术的前世今生 我第一次接触CGI是在2005年维护一个老旧的图书管理系统时。那时候Apache服务器上跑着一堆Perl脚本,每次修改都要小心翼翼地处理文件权限和环境变量。这种看似"古老"的技术,其实正是现代Web开发的基石。 CGI全称Common Ga…...
终极风扇控制指南:3个步骤实现Windows系统智能温控与静音优化
终极风扇控制指南:3个步骤实现Windows系统智能温控与静音优化 【免费下载链接】FanControl.Releases This is the release repository for Fan Control, a highly customizable fan controlling software for Windows. 项目地址: https://gitcode.com/GitHub_Tren…...
3步解锁AI编程助手全部潜力:Cursor Pro功能优化工具深度解析
3步解锁AI编程助手全部潜力:Cursor Pro功能优化工具深度解析 【免费下载链接】cursor-free-vip [Support 0.45](Multi Language 多语言)自动注册 Cursor Ai ,自动重置机器ID , 免费升级使用Pro 功能: Youve reached yo…...
Qwen3.5-9B量子计算辅助:算法描述理解+Qiskit代码生成+实验设计建议
Qwen3.5-9B量子计算辅助:算法描述理解Qiskit代码生成实验设计建议 1. 项目概述与核心能力 Qwen3.5-9B是一款拥有90亿参数的开源大语言模型,在量子计算领域展现出强大的辅助能力。该模型特别适合用于: 算法描述理解:解析复杂的量…...
稳定性与生态性的平衡:Windows 11 LTSC系统微软商店完整解决方案
稳定性与生态性的平衡:Windows 11 LTSC系统微软商店完整解决方案 【免费下载链接】LTSC-Add-MicrosoftStore Add Windows Store to Windows 11 24H2 LTSC 项目地址: https://gitcode.com/gh_mirrors/ltscad/LTSC-Add-MicrosoftStore Windows 11 LTSC…...
如何高效解密网易云音乐NCM文件?ncmdump工具全指南
如何高效解密网易云音乐NCM文件?ncmdump工具全指南 【免费下载链接】ncmdump 项目地址: https://gitcode.com/gh_mirrors/ncmd/ncmdump 你是否遇到过下载的网易云音乐NCM文件无法在其他播放器中打开的问题?ncmdump作为一款专业的NCM格式解密工具…...
