当前位置: 首页 > news >正文

C++笔记(七)

递增运算符重载

    //前置递增运算符重载:    
    Integer& operator++()
    {
        this->integer++;
        return *this;
    }

    //后置递增运算符重载:
    Integer operator++(int)
    {
        Integer temp = *this;
        this->integer++;
        return temp;
    }

  • 前置递增返回的是引用,后置递增返回的是值。返回引用类型是为了一直对一个数据进行递增操作,而返回值类型会导致本身只递增一次,其后的递增操作无效。
  • 后置递增直接返回值要形参的位置写上占位参数int与前置作区分。

赋值运算符重载

class Person
{
public:Person(int age) {m_Age = new int(age);}~Person(){if (m_Age != NULL){delete m_Age;m_Age = NULL;}}Person & operator=(Person& p){//编译器提供的是浅拷贝//m_Age = p.m_Age;//应该先判断是否有属性在堆区,如果有先释放干净,然后再进行深拷贝if (m_Age != NULL){delete m_Age;m_Age = NULL;}//深拷贝m_Age = new int(*p.m_Age);//返回对象本身return *this;}int* m_Age;
};void test1()
{Person p1(18);Person p2(20);Person p3(30);p3=p2 = p1;cout << "p1的年龄为:" << *p1.m_Age << endl;cout << "p2的年龄为:" << *p2.m_Age << endl;cout << "p3的年龄为:" << *p3.m_Age << endl;
}
int main() {test1();int a = 10;int b = 20;int c = 30;c = b = a;cout << "a=" << a << endl;cout << "b=" << b << endl;cout << "c=" << c << endl;system("pause");return 0;
}

关系运算符重载

bool operator==(Person& p) {
        if (this->m_Name == p.m_Name && this->m_Age == p.m_Age) {
            return true;
        }
        return false;
    }

函数调用运算符重载

  • 函数调用运算符()也可以重载
  • 由于重载后使用的方式非常像函数的调用,因此成为仿函数
  • 仿函数没有固定写法,非常灵活

void operator()(string text) {
        cout << text << endl;
    }

int operator()(int v1, int v2) {
        return v1 + v2;
    } 

 

相关文章:

  • 前缀和 差分
  • 05 - 什么是路由协议
  • 数据结构—动态查找
  • 第十章 函数 (上)第一节-第九节
  • 宠物处方单子怎么开,宠物门诊处方管理软件教程
  • JVM 笔记
  • 常见的网络安全威胁和防护方法
  • C++——构造函数
  • Android使用ScrollView导致鼠标点击事件无效
  • LeetCode 热题 100 | 链表(上)
  • 解决Docker AList本地挂载失效的问题。
  • 免费电视TV盒子软件,好用的免费电视盒子软件大全,免费电视盒子APP大全,2024最新整理
  • 影院购票|电影院订票选座小程序|基于微信小程序的电影院购票系统设计与实现(源码+数据库+文档)
  • npm 以组织为单位发布依赖包(@username/package-name、@org-name/package-name)
  • 【全网最全】2024美赛ABCDEF题思路模型全解(后续会更新)
  • 【每日笔记】【Go学习笔记】2019-01-10 codis proxy处理流程
  • 【跃迁之路】【585天】程序员高效学习方法论探索系列(实验阶段342-2018.09.13)...
  • angular组件开发
  • ES学习笔记(12)--Symbol
  • PAT A1017 优先队列
  • PAT A1092
  • select2 取值 遍历 设置默认值
  • 关于List、List?、ListObject的区别
  • 使用Maven插件构建SpringBoot项目,生成Docker镜像push到DockerHub上
  • 想写好前端,先练好内功
  • 用简单代码看卷积组块发展
  • RDS-Mysql 物理备份恢复到本地数据库上
  • #Js篇:单线程模式同步任务异步任务任务队列事件循环setTimeout() setInterval()
  • #我与Java虚拟机的故事#连载10: 如何在阿里、腾讯、百度、及字节跳动等公司面试中脱颖而出...
  • $.ajax,axios,fetch三种ajax请求的区别
  • (16)Reactor的测试——响应式Spring的道法术器
  • (多级缓存)缓存同步
  • (二)学习JVM —— 垃圾回收机制
  • (二)丶RabbitMQ的六大核心
  • (二开)Flink 修改源码拓展 SQL 语法
  • (附源码)springboot宠物管理系统 毕业设计 121654
  • (原創) 如何優化ThinkPad X61開機速度? (NB) (ThinkPad) (X61) (OS) (Windows)
  • (原創) 未来三学期想要修的课 (日記)
  • (转)nsfocus-绿盟科技笔试题目
  • (转载)利用webkit抓取动态网页和链接
  • .mysql secret在哪_MySQL如何使用索引
  • .Net Memory Profiler的使用举例
  • .project文件
  • [ C++ ] STL---string类的模拟实现
  • [ JavaScript ] JSON方法
  • [2013AAA]On a fractional nonlinear hyperbolic equation arising from relative theory
  • [2019.2.28]BZOJ4033 [HAOI2015]树上染色
  • [AIGC 大数据基础]hive浅谈
  • [Android]Tool-Systrace
  • [Android]如何调试Native memory crash issue
  • [Android]使用Android打包Unity工程
  • [Angular] 笔记 9:list/detail 页面以及@Output
  • [ASP.NET 控件实作 Day7] 设定工具箱的控件图标
  • [C#]扩展方法
  • [E链表] lc83. 删除排序链表中的重复元素(单链表+模拟)