C++_类和对象(中篇)—— const成员函数、取地址运算符的重载

news2024/11/15 10:00:39

目录

三、类和对象(中)

6、取地址运算符重载

1、const成员函数

2、取地址运算符的重载 


三、类和对象(中)

6、取地址运算符重载

1、const成员函数

  1. 将const修饰的成员函数称之为const成员函数,const修饰成员函数放到成员函数参数列表的后面。
  2. const实际修饰该成员函数隐含的this指针指向的对象,表明在该成员函数中不能对类的任何成员进行修改。没有修改的话就可以加,修改的话就不可以加const。
  3. const 修饰Date类的Print成员函数,Print隐含的this指针由 Date* const this 变为 const Date* const this
    #include<iostream>
    using namespace std;
    class Date
    {
    public:
        Date(int year = 1, int month = 1, int day = 1)
        {
            _year = year;
            _month = month;
            _day = day;
        }
    
        
        //若不加上const,则为void Print(Date* const this),this指针中的const修饰的是指针不能被改变
        // void Print(const Date* const this) const
        void Print() const
        {
            cout << _year << "-" << _month << "-" << _day << endl;
        }
    
    private:
        int _year;
        int _month;
        int _day;
    };
    
    int main()
    {
        // 这⾥⾮const对象也可以调⽤const成员函数是⼀种权限的缩⼩
        Date d1(2024, 7, 5);
        //&d -> Date*
        d1.Print();
    
        const Date d2(2024, 8, 5);
        //&d -> const Date*
        d2.Print();
    
        return 0;
    }

总结:一个成员函数,不修改成员变量的建议都加上。 c2821e9ff43843618ba4f742822423aa.png 

更多详细例子可以去看博主的C++_类与对象(中篇)的日期类实现中的const修饰:C++_类和对象(中篇)—— 运算符重载、赋值运算符重载、日期类实现-CSDN博客

2、取地址运算符的重载 

  1. 取地址运算符重载分为普通取地址运算符重载和const取地址运算符重载。
  2. ⼀般这两个函数编译器自动生成的就可以够我们用了,不需要去显示实现。
  3. 除非⼀些很特殊的场景,比如我们不想让别人取到当前类对象的地址,就可以自己实现⼀份,胡乱返回⼀个地址。
    class Date
    {
    public :
        Date* operator&()
        {
            return this;
            // return nullptr;
        }
    
        const Date* operator&()const
        {
            return this;
            // return nullptr;
        }
    
    private :
        int _year ; // 年
        int _month ; // ⽉
        int _day ; // ⽇
    };

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

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

相关文章

【网络安全的神秘世界】目录遍历漏洞

&#x1f31d;博客主页&#xff1a;泥菩萨 &#x1f496;专栏&#xff1a;Linux探索之旅 | 网络安全的神秘世界 | 专接本 | 每天学会一个渗透测试工具 先来了解两个概念&#xff1a; 身份认证&#xff1a;验证用户或者系统身份的过程&#xff0c;确保他们所声明的身份是真实的…

UE 禁用运行模式下的引擎内置按键

找到对应引擎版本安装目录下的BaseInput.ini文件&#xff0c;打开并修改

YoloV8改进策略:BackBone改进|Swin Transformer赋能YoloV8,性能跃升的新篇章

摘要 在深度学习领域,目标检测作为计算机视觉的核心任务之一,其性能的提升始终吸引着研究者们的目光。近期,我们创新性地将Swin Transformer这一前沿的Transformer架构引入到YoloV8目标检测模型中,通过替换其原有的主干网络,实现了检测性能的显著提升,为YoloV8系列模型注…

.Net网络通信组件 - TouchSocket

文章目录 .Net网络通信组件 - TouchSocket1、新建.Net8控制台项目2、Nuget安装TouchSocket组件3、编写服务端代码4、编写客户端代码5、编写Program代码6、运行效果7、日志组件&#xff08;NLog&#xff09;参考我的另一篇博客 .Net网络通信组件 - TouchSocket 1、新建.Net8控制…

网络安全学习路线,史上最全网络安全学习路线整理

很多小伙伴在网上搜索网络安全时&#xff0c;会出来网络安全工程师这样一个职位&#xff0c;它的范围很广&#xff0c;只要是与网络安全挂钩的技术人员都算网络安全工程师&#xff0c;一些小伙伴就有疑问了&#xff0c;网络安全现在真的很火吗&#xff1f; 那么无涯就带大家看…

《高等代数》范德蒙德行列式(应用)

说明&#xff1a;此文章用于本人复习巩固&#xff0c;如果也能帮助到大家那就更加有意义了。 注&#xff1a;1&#xff09;此题中的行列式是缺失了一行的范德蒙德行列式&#xff0c;解题思路是将其与范德蒙德行列式进行对比&#xff0c;我们将其添上一行和一列补成范德蒙德行列…

解决SPI1在发送和接收8位数据时出现接收不同步的问题

STM32G474的SPI1工作在主机模式&#xff0c;将SPI1_MISO和SPI1_MOSI连接一起&#xff0c;实现自发自收测试。但是在“使用8位数据自发自收时”时&#xff0c;发现接收数据不是同步的。虽然SPI1初始化正确&#xff0c;但是还需要对SPI1_DR寄存器进行强制转换&#xff0c;否则&am…

2024年网络安全人才发展报告一览

前不久&#xff0c;由信通院、工业和信息化部教育与考试中心、中国网络空间新兴技术安全创新论坛等单位联合发布了《2024网络安全产业人才发展报告》&#xff0c;长达87页的调研报告深度剖析了目前中国网络安全产业人才供需、分布、就业等现状&#xff0c;这里&#xff0c;星尘…

C++ 第三讲:内存管理

C 第三讲&#xff1a;内存管理 1.C内存分布2.内存管理方式2.1C语言内存管理方式2.2C内存管理方式2.2.1new\delete操作内置类型2.2.2new\delete操作自定义类型 3.operator new与operator delete函数4.new和delete实现原理4.1内置类型4.2自定义类型 5.定位new5.1内存池的基本了解…

基于Java的学生档案管理系统的设计与实现

基于springbootvue实现的学生档案管理系统 &#xff08;源码L文ppt&#xff09;4-065 第4章 系统设计 4.1 总体功能设计 学生档案管理系统的总体功能设计包括学生信息管理、课程管理、教师信息管理、成绩管理和系统配置管理。系统将提供用户友好的界面&#xff0c;支…

【网络】传输层协议TCP

TCP协议 TCP&#xff08;Transmission Control Protocol&#xff0c;传输控制协议&#xff09;是一种面向连接的、可靠的、基于字节流的传输层通信协议&#xff0c;由IETF的RFC 793定义。TCP在IP&#xff08;Internet Protocol&#xff0c;互联网协议&#xff09;网络层上提供…

【Linux】—— muduo网络库的安装配置与使用

muduo网络库编程 Linux环境下Epollpthread线程库 Boost库安装与使用 安装Boost库 下载boost库源码&#xff0c;linux环境解压 tar -zxvf boost_1_69_0.tar.gz 解压完成后&#xff0c;进入该目录&#xff0c;查看内容 运行bootstrap.sh工程编译构建程序 ./bootstrap.sh …

javascript-代码执行原理

js 是解释型语言 js 引擎执行流程 分为两个阶段: 语法分析执行阶段执行阶段涉及的数据结构: 调用栈。处理执行上下文和执行代码内存堆。给对象分配内存任务队列。暂存待执行的任务,分为宏任务队列和微任务队列语法分析 词法分析 > 语法分析 > 代码生成(字节码) …

封装svg图片

前言 项目中有大量svg图片&#xff0c;为了方便引入&#xff0c;所以对svg进行了处理 一、svg是什么&#xff1f; svg是可缩放矢量图形&#xff0c;是一种图片格式 二、使用步骤 1.创建icons文件夹 将icons文件夹放进src中&#xff0c;并创建一个svg文件夹和index.js&…

深入探索迭代器模式的原理与应用

&#x1f3af; 设计模式专栏&#xff0c;持续更新中 欢迎订阅&#xff1a;JAVA实现设计模式 &#x1f6e0;️ 希望小伙伴们一键三连&#xff0c;有问题私信都会回复&#xff0c;或者在评论区直接发言 迭代器模式 &#x1f4bb; 迭代器模式 (Iterator Pattern) 是一种行为设计模…

【LeetCode】每日一题 2024_9_19 最长的字母序连续子字符串的长度(字符串,双指针)

前言 每天和你一起刷 LeetCode 每日一题~ LeetCode 启动&#xff01; 题目&#xff1a;坐上公交的最晚时间 代码与解题思路 func longestContinuousSubstring(s string) (ans int) { // 题目要求&#xff1a; 最长 的 字母序连续子字符串 的长度// 双指针&#xff0c;start …

【学习笔记】线段树分裂

前言 有线段树合并就应该有线段树分裂。它是线段树合并的逆过程。具体的&#xff0c;你需要以权值线段树中第 k 小的数为分界线&#xff0c;把线段树分成两半。 算法流程 和线段树上二分类似。假设原来的线段树为 u&#xff0c;要分裂出线段树 v 记左子树的权值为 val。如果…

CodeMeter助力软件授权与IP保护,保障工业自动化与物联网安全

随着工业自动化的飞速发展&#xff0c;Hilscher的开放工业4.0联盟&#xff08;OI4&#xff09;旗舰店应运而生&#xff0c;将应用商店模式引入工业领域。凭借CodeMeter授权和加密技术的支持&#xff0c;该商店为工业用户提供了一个安全且开放的应用程序和解决方案平台。该平台不…

超声波清洗机哪个品牌好用又实惠?精选业内四款优质清洗机推荐

超声波清洗机作为一种创新的清洁解决方案&#xff0c;凭借其深入微观的清洁效能、简便的操作方式以及对物品的细腻呵护&#xff0c;正逐渐成为广受喜爱的清洁良品。不过&#xff0c;市面上品牌林立、型号多样&#xff0c;价格亦波动不一&#xff0c;这无疑为消费者选购时平添了…

ATT&CK靶机实战系列之vulnstack2

声明: 本文章只是用于网络安全交流与学习&#xff0c;若学者用学到的东西做一些与网络安全不相关的事情&#xff0c;结果均与本人无关&#xff01;&#xff01;&#xff01; 靶场环境: 使用kali作为hacker的攻击机器&#xff0c;来对web pc dc进行攻击。 这里声明一下: 关于…