【C++】:const成员,取地址及const取地址操作符重载

ops/2025/2/9 7:11:55/

目录

  • 一,const成员
  • 二,取地址及const取地址操作符重载

一,const成员

将const修饰的“成员函数”称之为const成员函数,const修饰类成员函数,实际修饰该成员函数隐含的this指针,表明在该成员函数中不能对类的任何成员进行修改

使用方式:规定在函数后面加 const。

看看下面的几段代码:

代码1:对象d1是const类型,Print函数后面没有const,运行结果报错。

class Date
{
public:Date(int year, int month, int day){_year = year;_month = month;_day = day;}//d1.Print(&d1); d1对象类型是 const Date* 只读void Print() //Date* const this 可读可写 权限放大了{cout << _year << "-" << _month << "-" << _day << endl;}
private:int _year;int _month;int _day;
};int main()
{//d1是const对象,d1对象类型是const Date*const Date d1(2024, 4, 14);d1.Print();return 0;
}

代码2:对象d1是const类型,在 Print 函数后加了const,正常运行。

class Date
{
public:Date(int year, int month, int day){_year = year;_month = month;_day = day;}//d1.Print(&d1); d1对象类型是 const Date* 只读//const Date* const this,const修饰*this,本质改变this的类型void Print() const{cout << _year << "-" << _month << "-" << _day << endl;}
private:int _year;int _month;int _day;
};int main()
{const Date d1(2024, 4, 25);//d1是const对象,d1对象类型是 const Date*d1.Print();return 0;
}

代码3:对象d2不是const类型,在 Print 函数后加了const,正常运行。

class Date
{
public:Date(int year, int month, int day){_year = year;_month = month;_day = day;}//d2.Print(&d2); d2对象类型是Date* const,可读可写void Print() const{cout << _year << "-" << _month << "-" << _day << endl;}
private:int _year;int _month;int _day;
};int main()
{Date d2(2024, 4, 25);//d2是非const对象d2.Print();//调用Print就是权限的缩小return 0;
}

上述三段代码的原理图解如下:
在这里插入图片描述

总结:const成员函数是具有优势的,因为不管是传递含const对象,还是传递不含const对象,成员函数都可以调用。所以当我们要使用的对象不发生改变时,即隐含的this的内容不改变,一般都用const成员函数。

二,取地址及const取地址操作符重载

取地址操作函数和加了const的取地址操作函数构成重载。正常情况取出的是this指针的地址。

这两个默认成员函数一般不用我们自己定义 ,编译器默认会生成。

使用如下:

class A
{
public:A* operator&(){cout << "A* operator&()" << endl;return this;}const A* operator&() const{cout << "const A* operator&() const" << endl;return this;}private:int _a = 1;int _b = 2;int _c = 3;
};int main()
{A aa1;const A aa2;cout << &aa1 << endl;cout << &aa2 << endl;return 0;
}

在这里插入图片描述

除非不想让该类型的对象被取地址,就可以自己定义,返回指定地址(如空地址或是假地址) 。


http://www.ppmy.cn/ops/28835.html

相关文章

工具:如何从NCBI下载SRA数据

如何从NCBI下载SRA数据 我们通常需要从NCBI去下载公共数据&#xff0c;这些数据常常是以SRA格式存储在云端&#xff0c;那么我们该如何下载它们呢。 1. 登陆NCBI&#xff0c;选择GEO DataSets&#xff0c;输入查询关键字&#xff1a;“GSE147236” 2. 点击第一个items&#x…

1、Qt简介

文章目录 前言一、pySide2 / pySide6 ,PyQt5 / PyQt6二、安装包1 安装pyside22 安装pyqt5三、从一个简单的例子开始三、界面动作处理---信号(signal)与槽(slot)(Qt最核心的机制)--- 绑定事件封装到类中总结前言 参考文章:Qt简介 本文开始就开始进入到qt的开发笔记书写…

android studio拍照功能问题解决

1.点击拍照功能直接闪退 2.拍照后不能选择确认键&#xff0c;无法保存 上述是在android studio做项目中经常会使用到模拟器或真机的拍照功能时主要遇到的两个问题。 解决方法&#xff1a; 1.直接闪退问题&#xff1a; if(Build.VERSION.SDK_INT>Build.VERSION_CODES.N)…

合合信息acge模型获C-MTEB第一,文本向量化迎来新突破

前言&#xff1a; 在当今时代&#xff0c;大型语言模型以其惊人的发展速度和广泛的应用前景&#xff0c;正成为全球科技界的瞩目焦点。这些模型的强大能力&#xff0c;源自于背后默默支撑它们的Embedding技术——一种将语言转化为机器可理解的数值向量的关键技术。随着大型语言…

google chromeDriver 地址

#chrome driver 下载地址 https://getwebdriver.com/chromedriver #chrome brower下载地址 https://googlechromelabs.github.io/chrome-for-testing/ centos 安装的dockerFile的部分命令&#xff1a; #安装browser wget https://dl.google.com/linux/chrome/rpm/stable/x86_…

纯血鸿蒙APP实战开发——监听HiLog日志实现测试用例验证

介绍 日常中在进行测试用例验证时&#xff0c;会出现部分场景无法通过判断UI的变化来确认用例是否正常运行&#xff0c;我们可以通过监听日志的方式来巧妙的实现这种场景。本示例通过监听hilog日志的回调&#xff0c;判断指定日志是否打印&#xff0c;来确定测试用例的执行结果…

NLP(10)--TFIDF优劣势及其应用Demo

前言 仅记录学习过程&#xff0c;有问题欢迎讨论 TF*IDF&#xff1a; 优势&#xff1a; 可解释性好 可以清晰地看到关键词 即使预测结果出错&#xff0c;也很容易找到原因 计算速度快 分词本身占耗时最多&#xff0c;其余为简单统计计算 对标注数据依赖小 可以使用无标注语…

2024年五一数学建模C题完整解题思路代码

2024年第二十一届五一数学建模竞赛题目 C题 煤矿深部开采冲击地压危险预测 煤炭是中国的主要能源和重要的工业原料。然而&#xff0c;随着开采深度的增加&#xff0c;地应力增大&#xff0c;井下煤岩动力灾害风险越来越大&#xff0c;严重影响着煤矿的安全高效开采。在各类深…