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

运算符重载讲解

简介:
C++为了增强代码的可读性引入了运算符重载,运算符重载是具有特殊函数名的函数,除了名字、参数传参 及 调用的方法有点不同,其余和普通函数基本类似
函数名为:operator [后面接需要重载的运算符符号]
函数声明:[返回值类型] operator (参数列表);
operator 为运算符重载所需用的一个关键字
作用:
在 C 中,内置类型的变量的运算规则是已经规定了的,我们直接使用运算符运算即可,但 C++ 中,拥有很多自定义类型,自定义类型是不能直接进行符号运算的,所以就有了运算符重载函数,我们可以在函数中自己定义运算规则,去像计算内置类型一样计算自定义类型,并且调用时我们可以像内置类型那样直接进行 +-*/ 地写出来,编译器会自己根据所用的运算符去匹配对应的运算符重载函数,这是 C++ 中所支持的,也正是这样大大增加了代码的可读性
例:
class test {
public:test(int a = 0):_a(a){}//+号应该有两个操作数,但因为是成员函数,省略掉一个参数this//注意参数中至少有一个自定义类型(类)int operator+(int b) {return this->_a * b;}private:int _a;
};int main() {test t1(3);cout << t1 + 3 << endl;//输出9,重载之后我们可以用正常逻辑进行运算,运算逻辑却是我们自己定义cout << t1.operator+(3) << endl;//底层其实就是调用成员函数,这里函数名为 operator+return 0;
}

注意:
  • 不能通过连接其他的符号来创建新的操作符,比如: operator@ ,不能通过定义一个这样的操作符重载来创建@ 这个本不存在的操作符
  • 操作符重载的参数必须至少有一个是类类型的
  • 操作符重载的参数个数和传参顺序 是与 操作符的操作对象的个数和顺序 一一对应的
  • 作为类成员函数重载时,其形参看起来比操作数数目少1个,因为成员函数的第一个参数是默认并隐藏的 this
  • 运算符重载和函数重载没什么相互关系,运算符重载是一种特殊函数,函数重载是C++中的一种与函数有关的语法,运算符重载支持函数重载
  • .*(成员指针访问运算符),:: (作用域解析运算符),sizeof (大小运算符),? : (三元条件运算符) . (成员访问运算符),注意以上5个运算符不能重载。这个经常在笔试选择题中出现。
前置++和后置++重载:
像上面所说,运算符重载命名规则为 operator + 运算符,而面对前置++和后置++时,它们的函数名都为 operator++,并且操作对象都只有一个,那怎么把它们区分开来呢,我们C++之父本贾尼也被难到了,迫不得已破掉之前的规则给它们进行了一个特殊处理,那就是给 后置++的运算符重载的函数多一个参数,以此形成函数重载而和前置++区分,这个参数就为 类型int
而我们直接使用前置++和后置++操作自定义类型时,它还是会自动调用对应运算符重载,但显式调用时,后置++就要多写一个随便的只要是 int 类型的实参(不过运算符重载一个目的就是为了提高可读性的,除特殊情况谁没事会去显式调用呢,知道这知识就行了)
http://www.dtcms.com/a/419241.html

相关文章:

  • 第1章 Windows PE开发环境
  • 前端数组去重:3 种常用方法原理与实战解析
  • 公司要想做个网站这么弄网页制作教材
  • 室内设计学校网站建设网站比较好的公司吗
  • 静态网站可以申请域名吗wordpress举报插件
  • 怎么样让百度搜到自己的网站中企动力 网站建设 收费
  • java实现邮件发送
  • 网站建设部署与发布有效期手机上管理wordpress
  • 南宁网站建设咨q479185700上墙域名服务商网站
  • 高端网站制wordpress缩略图支持外链图
  • 雷卯针对米尔MYC-CZU3EG 4EV 5EV-V2 开发板防雷防静电方案
  • NLP算法岗位面试题分享:Zero-Shot、One-Shot与Few-Shot学习
  • 移动网站建设自助建站网络推广怎么学
  • 宝山网站建设宝山怎么做自己的网站卖东西
  • Spring Boot 启动时将数据库数据预加载到 Redis 缓存
  • Nginx 502 Bad Gateway从 upstream 日志到 FastCGI 超时深度复盘
  • NLP自然语言处理性能评估指标
  • 零基础从头教学Linux(Day 43)
  • 网站后期维护协议企业网站建立哪
  • k8s 兼容摩尔线程
  • 网站建设人员工作计划网站定制设计价目表
  • RKD论文阅读
  • 导航类网站模板自己怎么做一个企业官网
  • 广东平台网站建设制作青岛网站设计怎么选
  • 如何破除迷信思维掌握ROS1/ROS2机器人学习的唯物主义
  • 桌面版exe安装和Python命令行安装2种方法详细讲解图片去水印AI源码私有化部署Lama-Cleaner安装使用方法-优雅草卓伊凡
  • C++聊天系统从零到一:CMake构建系统-企业级C++项目的构建利器
  • 折扣影票api?如何选择对接渠道?
  • 移动网站优化宁波企业网站制作公司
  • Oracle 闪回过期后的解决方法