【C++】类和对象(中)---取地址及const取地址操作符重载、const成员函数的使用

news/2025/2/13 5:52:57/

个人主页:平行线也会相交💪
欢迎 点赞👍 收藏✨ 留言✉ 加关注💓本文由 平行线也会相交 原创
收录于专栏【C++之路】💌
本专栏旨在记录C++的学习路线,望对大家有所帮助🙇‍
希望我们一起努力、成长,共同进步。🍓
在这里插入图片描述

目录

  • 前言
  • 取地址及const取地址操作符重载
  • const成员函数的使用

前言

今天是521,先祝各位玩的开心哈!!!
前面已经更新过了C++类和对象中的前四个默认成员函数:分别是构造函数析构函数拷贝构造函数赋值运算符重载函数
今天主要是把剩下的两个默认成员函数(取地址及const取地址操作符重载)更新完,同时讲解一下const成员函数的使用。

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

这两个默认成员函数一般不用重新定义 ,编译器默认会生成。

我们知道内置类型是可以直接使用相关的运算符的,但是自定义类型如果要使用运算符的话是需要进行重载的,因为自定义类型是不可以直接使用相关的运算符的。

#include<iostream>
using namespace std;
class Date
{
public:
private:int _year;int _month;int _day;
};
int main()
{Date da1;Date da2;cout << &da1 << endl;cout << &da2 << endl;return 0;
}

在这里插入图片描述

这个地方之所以可以直接对对象da1和da2进行&操作就是因为编译器自动生成了一个取地址操作符重载,当然我们也可以自己写,请看:

#include<iostream>
using namespace std;
class Date
{
public:Date* operator&(){cout << "Date* operator&()" << endl;return this;}const Date* operator&()const{cout << "const Date* operator&()const" << endl;return this;}
private:int _year = 23;int _month = 5;int _day = 21;
};
int main()
{Date da1;const Date da2;cout << &da1 << endl;cout << &da2 << endl;return 0;
}

在这里插入图片描述

//两个函数构成函数重载,只不过参数类型不同,参数分别是Date*、const Date*
Date* operator&()
{cout << "Date* operator&()" << endl;return this;
}
const Date* operator&()const
{cout << "const Date* operator&()const" << endl;return this;
}

什么场景下会使用取地址及const取地址操作符重载呢?
不想让其他人取到的普通对象的地址,请看:
在这里插入图片描述

const成员函数的使用

什么是const成员函数?

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

这里要特别强调一下:

const修饰的是成员函数中的*this,而不是this,即this指针指向的内容不可更改(如const Date* this),但是this指针自身是可以修改的Date* const thisthis指针自身是不可更改的,但是其指向的内容可以更改。

在这里插入图片描述
修改方式如下:

void Print()const
{cout << _year << "-" << _month << "-" << _day << endl;
}

成员函数后面加上const之后,普通对象(权限缩小)和const对象(权限平移)都可以进行调用。const修饰的是this
但是并不是所有的成员函数都要加上const。那么什么场景下我们我们要加上const呢?

要修改对象成员函数的对象不能加const。就比如说+=-=的赋值重载运算符成员函数。因为我们加上const修饰对象时,this指针指向的内容不可以修改。
所以只要我们不修改成员变量的话都是可以加上const。

再来举个例子,请看:
在这里插入图片描述

总结
并不是所有成员函数后面都可以加const,因为对于想要修改对象成员变量的函数是不可以加const的。 同时,只要成员函数内部不修改成员变量,都应该加const,这样的话const对象和普通对象就都可以进行调用了。

好了,以上就是【C++】类和对象(中)的最后一部分内容,【C++】类和对象(中)主要讲解了六个默认成员函数的内容。其中最重要的就是前四个默认成员函数:构造函数析构函数拷贝构造函数赋值运算符重载函数

就到这里啦,再见各位!!!

在这里插入图片描述


http://www.ppmy.cn/news/76634.html

相关文章

代理IP和网络安全

在当今数字化时代&#xff0c;网络安全是一个极为重要的话题。随着互联网的普及和技术的不断发展&#xff0c;网络攻击和数据泄露的风险也在不断增加。为了保护网络和用户的隐私安全&#xff0c;代理IP成为了一种重要的工具。本文将介绍代理IP的基本概念和原理&#xff0c;并探…

C语言基础知识:对文件的基本操作

目录 打开文件 关闭文件 文件的读写操作 1.输入输出字符 2.输入输出字符串&#xff1a; 3.格式化输入与输出 4、文件读写移动操作 应用举例 文件是当今计算机系统不可或缺的部分。文件用于存储程序&#xff0c;文档&#xff0c;数据&#xff0c;书信&#xff0c;表格&a…

20230520----重返学习-React.Component与React.PureComponent与this.setState异步性-事件进阶

day-074-seventy-four-20230520-React.Component与React.PureComponent与this.setState异步性-事件进阶 React 浅比较两个值 浅比较两个值 import _ from "/assets/utils";//这个是之前写的工具函数类&#xff0c;里面的isObject就是下方的isObject函数。 // 检测…

Kubernetes(k8s)集群安装部署

一. 环境说明 名称IP系统配置主控节点192.168.136.11Rocky9.22核4G工作节点1192.168.136.12Rocky9.22核4G工作节点2192.168.136.13Rocky9.22核4G 二. 系统先决条件配置(所有节点&#xff09; 2.1 关闭防火墙 防火墙可能会导致重复的防火墙规则和破坏kube-proxy&#xff0c;…

CSS零基础快速入门(详细教程)

1&#xff0c;CSS概述 CSS是层叠样式表&#xff0c;由Cascading Style Sheets简称而来。 CSS的功能为&#xff1a;能够对网页中元素位置的排版进行像素级精确控制&#xff0c;实现美化页面的效果&#xff0c;并且能够做到页面的样式和结构分离。 CSS的作用效果跟我们日常使用…

助力服务智能医疗检测,基于yolov5开发构建结直肠息肉检测系统,实践训练n/s/m不同量级模型,对比性能结果

将人工智能技术应用于众多的生活真实场景中是一件很有前景的事情&#xff0c;在我前面的博文中已经有不少的相关的开发实践&#xff0c;应用于医学领域也是一个非常重要的细分分支领域&#xff0c;在前面的博文中也有一些实践&#xff0c;感兴趣的话可以自行移步阅读。 《服务…

AI是怎么帮我写代码,写SQL的?(本文不卖课)

近期&#xff0c;ChatGPT风起云涌&#xff0c;“再不入局&#xff0c;就要被时代淘汰”的言论甚嚣尘上&#xff0c;借着这一波创业的朋友都不止3-4个&#xff0c;如果没记错&#xff0c;前几次抛出该言论的风口似乎是区块链&#xff0c;元宇宙&#xff0c;WEB3.0。 画外音&…

初始MyBatis,w字带你解MyBatis

目录 一.什么是mybatis mybatis的概念 mybatis的优势 二.mybatis相对于JDBC&#xff0c;框架帮我们做了哪些事情&#xff1f; 三.对包含mybatis的程序进行实操 1.创建项目 2.修改配置文件 3.准备数据库相关内容 4.准备对应的xml文件和对应的mapper接口 5.定义对应的sq…