const成员函数 以及 取地址及const取地址操作符重载

目录

const成员函数

结论:

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


const成员函数

        将const 修饰的 成员函数 称之为 const成员函数 const 修饰类成员函数,实际修饰该成员函数的(*this) ,表明在该成员函数中 不能对类的任何成员进行修改
        this指针本来就是const,函数后的const修饰的是对象,表示不能对对象进行修改。
        我们来看看下面的代码
class Date
{
public:Date(int year, int month, int day){_year = year;_month = month;_day = day;}void Print(){cout << "Print()" << endl;cout << "year:" << _year << endl;cout << "month:" << _month << endl;cout << "day:" << _day << endl << endl;}void Print() const{cout << "Print()const" << endl;cout << "year:" << _year << endl;cout << "month:" << _month << endl;cout << "day:" << _day << endl << endl;}
private:int _year; // 年int _month; // 月int _day; // 日
};void Test()
{Date d1(2022,1,13);d1.Print();const Date d2(2022,1,13);d2.Print();
}
请思考下面的几个问题:
        1. const对象可以调用非 const 成员函数吗?(不可)
        2. 非 const 对象可以调用 const 成员函数吗?(可以)
        3. const成员函数内可以调用其它的非 const 成员函数吗?(不可)
        4. 非 const 成员函数内可以调用其它的 const 成员函数吗?(可以)

结论:

        只要成员函数中不需要修改成员变量(不需要修改对象),最好都加上const

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

        这两个默认成员函数一般不用重新定义 ,编译器默认会生成。
class Date
{ 
public :Date* operator&(){return this ;}const Date* operator&()const{return this ;}private :int _year ; // 年int _month ; // 月int _day ; // 日
};
        这两个运算符一般不需要重载,使用编译器生成的默认取地址的重载即可,只有特殊情况,才需要重载,比如想让别人获取到指定的内容!
例如:

class A
{
public:// 我们不实现,编译器会自己实现,我们实现了编译器就不会自己实现了// 一般不需要我们自己实现// 除非不想让别人取到这个类型对象的真实地址A* operator&(){return nullptr;}const A* operator&() const{return (const A*)0xffffffff;}
private:int _a1 = 1;int _a2 = 2;int _a3 = 3;
};int main()
{A aa1;const A aa2;cout << &aa1 << endl;cout << &aa2 << endl;return 0;
}

这个博客如果对你有帮助,给博主一个免费的点赞就是最大的帮助

欢迎各位点赞,收藏和关注哦

如果有疑问或有不同见解,欢迎在评论区留言哦

后续我会一直分享双一流211西北大学软件(C,数据结构,C++,Linux,MySQL)的学习干货以及重要代码的分享

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/pingmian/1372.shtml

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

相关文章

网络原理-IP协议

一、IP协议报头 版本号:用来表示IP协议的版本,现在常用的IP协议有两个版本,IPv4和IPv6&#xff0c;其他版本可能只存在于实验室中&#xff0c;并没有被广泛的使用。 首部长度:用来表示IP报头的长度,因为存在"选项"字段&#xff0c;所以IP报头是可变长的,此处单位为4…

日期类的实现

目录 Date.h Test.cpp 测试代码Test.cpp 日期类的实现 代码分享 Date.h #pragma once #include<iostream> using namespace std; #include<assert.h>class Date {//友元函数声明friend ostream& operator<<(ostream& out, Date& d);friend…

[渗透测试学习] Headless-HackTheBox

Headless-HackTheBox 信息搜集 使用nmap扫描一下 nmap -sV -sC -v --min-rate 1000 10.10.11.8可以发现5000端口是开放的,继续扫一下目录 访问/dashboard发现只有admin才可以,我们注意到cookie值为JWT加密,拿到揭秘网站验证下猜想 cookie为user用户,那么我们要想访问必须…

[阅读笔记29][AgentStudio]A Toolkit for Building General Virtual Agents

这篇论文是24年3月提交的&#xff0c;提出了一个用于agent开发的全流程工具包。 作者提到目前agent开发主要有两个阻碍&#xff0c;一个是缺乏软件基础&#xff0c;另一个是缺乏在真实世界场景中进行评估。针对这两个阻碍&#xff0c;作者涉及了一个开发工具包&#xff0c;包括…

[已解决]react打包部署

react打包部署 问题 npm install 命令无反应 思路 换成 yarn install 安装完hadoop的环境后&#xff0c;使用node的yarn会报错&#xff1a; 我们在cmd使用where yarn&#xff0c;如下&#xff1a; 看你想保留哪一个&#xff0c;我平时node用的多&#xff0c;就把hadoop的y…

【SAP HANA 21】HANA map函数与case when(示例)

一、MAP函数 HANA中MAP函数类似于ORACLE的decode函数 SELECT T1.SFC,t6.RESRCE, MAP(T7.STATUS,401,新建,402,排队中,403,活动,404,保留,405,已完成,406,已完成(保留),407,报废,408,无效,409,已删除,未知) STATUS_DESC FROM SFC T1 二、CASE WHEN表达式 SELECT COLUMN…

项目小游戏-贪吃蛇

目录 1.游戏开始 - GameStart 1.1cmd命令窗口 调节窗口命令 ​编辑更改窗口命名 ​编辑 1.2 Win32 API win32 API 的介绍: ​编辑 获取控制台坐标COORD 获取控制台句柄: 获取缓冲台光标信息: 获取虚拟键位: 本地初始化 setlocale(); 游戏开始的具体实现&#xff1a…

使用AOP切面做防止用户重复提交功能

在我们的项目中&#xff0c;需要考虑到有时候因为网络原因或者其他原因用户对同一个接口进行同一批数据的重复性操作&#xff0c;如果不做这样的处理很可能会在数据库中添加多条同样的数据。 我们可以通过使用aop来解决这样的问题&#xff0c;接下来看看具体怎么做吧~ 自定义…

Java8中常用的stream方法,工作中经常用到【持续更新】

Java 8 中的 Stream API 提供了一种更加函数式和便捷的方式来处理集合数据。以下是一些常用的 Stream 方法&#xff0c;以及它们的简要说明和对应的例子。 filter(Predicate)&#xff1a;根据指定的条件过滤集合中的元素。 List<Integer> numbers Arrays.asList(1, 2, 3…

网络原理-UDP和TCP

在传输层中有两个非常重要的协议&#xff0c;UDP和TCP&#xff0c;现在就来研究一下这两个协议。 UDP 报文格式 我们观察可以发现&#xff0c;里面UDP报文长度为2个字节&#xff0c;那么是多少呢&#xff1f;我们需要快速反应如下固定字节数据类型的取值范围&#xff1a; 字…

数据结构与算法学习笔记四---队列的表示和实现(C++)

目录 前言 1.队列的顺序存储方式的实现 1.定义 2.队列初始化 3.销毁 4.队列是否为空 5.队列长度 6.清空队列 7.队列头元素 8.入队 9.出队 10.完整代码 2.队列的链式存储方式的实现 1.定义 2.队列初始化 3.销毁 4.队列是否为空 5.队列长度 6.清空队列 7.队列…

Jenkins服务器IP更换,Jenkins URL地址更换

服务器的网络地址发生变动&#xff0c;修改jenkins服务器IP地址后&#xff0c;jenkins网页能够打开&#xff0c;但是job中的配置钩子没有自动改变&#xff0c;如图所示&#xff1a; 经过查询资料了解&#xff0c;需要修改jenkins本地化配置地址才可以显示正确&#xff1a; 1、…

初识ansible变量及实例配置

目录 1、为什么要使用变量 2、变量分类 3、 变量详解 3.1 vars,vars_files , group_vars 3.1 .1 vars 剧本中定义变量 3.1.2 vars_file 将变量存放到一个文件中&#xff0c;并在剧本中引用 3.1.3 group_vars 创建一个变量文件给某个组使用 实例1-根据不同的主机…

Java关键字和API

1 this和super关键字 1.this和super的意义 this&#xff1a;当前对象 在构造器和非静态代码块中&#xff0c;表示正在new的对象 在实例方法中&#xff0c;表示调用当前方法的对象 super&#xff1a;引用父类声明的成员 无论是this和super都是和对象有关的。 2.this和sup…

通过实例学C#之序列化与反序列化XmlSerializer类

简介 可以将类序列化成xml文件&#xff0c;或者将xml文件反序列化成类对象&#xff0c;一般用于保存或加载项目参数。 构造函数 XmlSerializer() 不使用函数创建一个xmlSerializer对象。 XmlSerializer(Type type) 使用type对象创建一个xmlSerializer对象&#xff0c;注意&…

lv_table

通过点击lv_table的某一行来选中这一行&#xff0c;以及通过点击另外创建的按钮来删除选中的这一行数据。在table_event_cb回调函数中&#xff0c;我们通过检测点击事件发生的行和列来确定被点击的行&#xff0c;然后在按钮的事件处理器btn_event_cb中&#xff0c;根据之前保存…

洛谷 P3811 [模板] 模意义下的乘法逆元

【模板】模意义下的乘法逆元 题目描述 给定 n , p n,p n,p 求 1 ∼ n 1\sim n 1∼n 中所有整数在模 p p p 意义下的乘法逆元。 这里 a a a 模 p p p 的乘法逆元定义为 a x ≡ 1 ( m o d p ) ax\equiv1\pmod p ax≡1(modp) 的解。 输入格式 一行两个正整数 n , p n,…

Qt——Qt网络编程之获取本机网络信息(通过QHostInfo和QNetworkInterface 类获取本地网络所有接口信息)

【系列专栏】:博主结合工作实践输出的,解决实际问题的专栏,朋友们看过来! 《项目案例分享》 《极客DIY开源分享》 《嵌入式通用开发实战》 《C++语言开发基础总结》 《从0到1学习嵌入式Linux开发》

asp.net core mvc 路由

在ASP.NET Core MVC中&#xff0c;路由是一项核心功能&#xff0c;它负责将进来的HTTP请求映射到相应的控制器和动作方法上。ASP.NET Core支持两种路由方式&#xff1a;传统的基于模板的路由&#xff08;约定路由&#xff09;和属性路由。 1. 基于约定的路由 在Startup.Confi…

【001_IoT/物联网通信协议基础: HTTP、Websocket、MQTT、AMQP、COAP、LWM2M一文搞懂】

001_IoT/物联网通信协议基础: HTTP、Websocket、MQTT、AMQP、COAP、LWM2M一文搞懂 文章目录 001_IoT/物联网通信协议基础: HTTP、Websocket、MQTT、AMQP、COAP、LWM2M一文搞懂创作背景通信模型ISO/OSI七层模型 和 TCP/IP四层模型网络通信数据包格式&#xff08;Ethernet II&…