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

c++ 学习 之 运算符重载

前言

运算符重载的概念:
对已有的运算符重新进行定义,赋予其另外一种功能,以适应不同的数据类型

加号运算符重载

作用:定义两个自定义的数据类型相加的运算

正常情况下,如果想要实现类中两个int 类型的相加,可以参考下面的代码

#define CRT_SECURE_NO_WARNINGS
#include<iostream>
using namespace std;class Person
{
public:Person(int x, int y){m_A = x;m_B = y;}// 修改为返回引用Person& add(const Person& p){m_A += p.m_A;m_B += p.m_B;return *this;}void print(){cout << "m_A: " << m_A << endl;cout << "m_B: " << m_B << endl;}
private:int m_A;int m_B;
};int main()
{Person A(1, 1);Person B(2, 2);// 使用赋值操作符初始化 cPerson c = A.add(B);c.print();return 0;
}

但是上面的代码的话A 和 c 共同使用同一个地址

看看下面的运算符重载

#define CRT_SECURE_NO_WARNINGS
#include<iostream>
using namespace std;class Person
{
public:void print(){cout << "m_A: " << m_A << endl;cout << "m_B: " << m_B << endl;}int m_A;int m_B;
};Person operator+(Person& p1, Person& p2)
{Person tmp;tmp.m_A = p1.m_A + p2.m_A;tmp.m_B = p1.m_B + p2.m_B;return tmp;}int main()
{Person A;A.m_A = 1;A.m_B = 1;Person B;B.m_A = 2;B.m_B = 2;// Person C = A + B;   这种方式和下面的是等价的Person C = operator+(A, B);C.print();return 0;
}

下面展示成员函数来实现运算符重载

#define CRT_SECURE_NO_WARNINGS
#include<iostream>
using namespace std;class Person
{
public:Person operator+(Person& p1){Person tmp;tmp.m_A = p1.m_A + this->m_A;tmp.m_B = p1.m_B + this->m_B;return tmp;}void print(){cout << "m_A: " << m_A << endl;cout << "m_B: " << m_B << endl;}int m_A;int m_B;
};int main()
{Person A;A.m_A = 1;A.m_B = 1;Person B;B.m_A = 2;B.m_B = 2;Person C = A + B;  // 这种方式和下面的是等价的//Person C = A.operator+(B);C.print();return 0;
}

运算符重载 ,也可以实现 类 与 整形的结合

#define CRT_SECURE_NO_WARNINGS
#include<iostream>
using namespace std;class Person
{
public:void print(){cout << "m_A: " << m_A << endl;cout << "m_B: " << m_B << endl;}int m_A;int m_B;
};Person operator+(Person& p1, Person& p2)
{Person tmp;tmp.m_A = p1.m_A + p2.m_A;tmp.m_B = p1.m_B + p2.m_B;return tmp;}// 下面写一个函数重载
Person operator+(Person& p1, int num)
{Person tmp;tmp.m_A = p1.m_A + num;tmp.m_B = p1.m_B + num;return tmp;
}int main()
{Person A;A.m_A = 1;A.m_B = 1;Person B;B.m_A = 2;B.m_B = 2;// Person C = A + B;   这种方式和下面的是等价的//Person C = operator+(A, B);//C.print();Person D = A + 10;D.print();return 0;
}
http://www.lryc.cn/news/177565.html

相关文章:

  • 各种数据库表名长度限制整理
  • Go 里的超时控制
  • 一文彻底搞清楚Spark Schema
  • Nginx多出口IP解决代理端口数量限制,CentOS安装Nginx并开启https2.0
  • SpringBoot项目(百度AI整合)——如何在Springboot中使用语音文件识别 ffmpeg的安装和使用
  • 探索古彝文AI识别技术:助力中国传统文化的传承与发扬
  • mysql面试题2:说一说MySQL的架构设计?一条 MySQL 语句执行的步骤?
  • UPnP协议和SSDP协议
  • notepad++配置python2环境
  • 在ThinkAdmin中弹出层关闭后回调
  • vue3 和vue2 的比较
  • 算法通过村第八关-树(深度优先)黄金笔记|寻找祖先
  • postgresql|数据库|数据库测试工具pgbench之使用
  • 代码随想录Day51 | 309.最佳买卖股票时机含冷冻期
  • libopenssl 实现私钥加密公钥解密
  • 代码随想录 Day - 51|#309 最佳买卖股票时机含冷冻期|#714 买卖股票的最佳时机含手续费
  • .net 使用IL生成代理类实现AOP对比Java Spring Boot的AOP
  • 美容店预约小程序搭建流程
  • ppt 作图 如何生成eps格式
  • 渗透测试中的前端调试(上)
  • 跨境电商引流之Reddit营销,入门保姆级攻略
  • Linux下虚拟网卡的基本命令
  • conan入门(二十七):因profile [env]字段废弃导致的boost/1.81.0 在aarch64-linux-gnu下交叉编译失败
  • BFS专题7 多终点迷宫问题
  • ES6中对象新增了哪些扩展?
  • 蓝桥杯每日一题2023.9.22
  • vscode左键无法跳转到定义的文件
  • c、c++排序的相关知识(归并排序、计数排序、稳定性等)
  • oracle定时任务的使用
  • VSCode 配置 Lua 开发环境(清晰明了)