本篇要学习的内容和知识结构概览

运算符重载使用场景

常规赋值操作

我们现在有一个类

想要实现这种赋值操作

具体实现如下:

所以说呢,我们在使用运算符进行运算的时候, 实际上也是通过函数来实现运算的.

任何运算都是通过函数来实现的, 所以通过运算符来进行计算, 实际也是通过函数来完成

运算符重载的实质

表达式 7 / 2 = 3, 7.0 / 2.0 = 3.5, 同一个运算符 / , 具有不同的意义, 称之为”运算符重载”, 实际上就是"函数重载".

每个运算符都有自己的函数形式, 像下面这些

7 + 2 的函数形式就是 operator + (7, 2)

7 - 2 的函数形式就是 operator - (7, 2)

7 * 2 的函数形式就是 operator * (7, 2)

7 / 2 的函数形式就是 operator / (7, 2)

所以, 要重载某个运算符, 只要重载相应的函数就可以了

比如:

定义的重载运算符都要求能够访问这个类型的私有成员, 在这个前提下:

要么将运算符重载为这个类型的成员函数

要么将运算符重载为这个类型的友元

将作为类的成员函数的重载运算符称为类运算符

将作为类的友元重载运算符称为友元运算符

可重载运算符和不可重载运算符的列表

下面是: 可重载运算符与只能用类运算符重载和只能用友元运算符重载和不是运算符的区分

插入符<< 和 提取符 >> 的重载

注意:

<< 或者 >> 输入流和输出流都是标准类库, 不可修改, 所以不能在它们自己的类里重载为类运算符

操作符的左边是流对象,  而不是被操作的对象,而且我们还要访问被操作对象的私有数据, 所以我们只能将它们作为被操作类对象的友元重载

注意:不能自己定义新的运算符, 只能是把原有的运算符用到自己设计的类上去

++ 运算符的重载:

作为类运算符的重载

作为友元运算符的重载

注意:

经过重载, 运算符并不改变原有的优先级, 也不改变所需操作数目

当不涉及到定义的类对象时, 它仍然执行系统预定义的运算, 只有用到自己定义的对象止, 才执行新定义的操作

类运算符和友元运算符的区别

如果运算符所需的操作数希望进行隐式类型转换, 则运算符应通过友元来重载

如果一个运算符的操作需要修改类对象的状态, 则应当使用类运算符

运算符 + 作为友元运算符

运算符 + 作为类运算符 (会出现编译错误)

注意:

在上面的main函数代码中, 如果对象作为重载运算符函数的参数, 则可以使用构造函数将常量转换成该类型的对象. 如果使用引用作为参数, 这些常量不能作为对象名使用, 所以编译错误

总结

在学习C++这门语言的时候明显的感觉到她的包罗万象, 丰富多彩. 她有自己的很多特性, 表现在使用上就是更加的灵活, 总得来说就是: 没有她没有的, 只有你想不到的!

希望对大家有帮助!


自学C/C++编程难度很大,不妨和一些志同道合的小伙伴一起学习成长!

C语言C++编程学习交流圈子,【点击进入微信公众号:C语言编程学习基地

有一些源码和资料分享,欢迎转行也学习编程的伙伴,和大家一起交流成长会比自己琢磨更快哦!

C/C++编程笔记:C++入门知识丨运算符重载的更多相关文章

  1. C#高级编程笔记 (6至10章节)运算符/委托/字符/正则/集合

    数学的复习,4^-2即是1/4/4的意思, 4^2是1*2*2的意思,而10^-2为0.01! 7.2运算符 符号 说明 例   ++ 操作数加1 int i=3; j=i++; 运算后i的值为4,j ...

  2. C/C++编程笔记:C++入门知识丨从结构到类的演变

    先来看看本节知识的结构图吧! 接下来我们就逐步来看一下所有的知识点: 结构的演化 C++中的类是从结构演变而来的, 所以我们可以称C++为”带类的C”. 结构发生质的演变 C++结构中可以定义函数, ...

  3. C/C++编程笔记:C++入门知识丨多态性和虚函数

    本篇要学习的内容和知识结构概览 多态性 编译时的多态性称为静态联编. 当调用重载函数时, 在编译期就确定下来调用哪个函数. 运行时的多态性称为动态联编. 在运行时才能确定调用哪个函数, 由虚函数来支持 ...

  4. C/C++编程笔记:C++入门知识丨继承和派生

    本篇要学习的内容和知识结构概览 继承和派生的概念 派生 通过特殊化已有的类来建立新类的过程, 叫做”类的派生”, 原有的类叫做”基类”, 新建立的类叫做”派生类”. 从类的成员角度看, 派生类自动地将 ...

  5. C/C++编程笔记:C++入门知识丨类和对象

    本篇要学习的内容和知识结构概览 类及其实例化 类的定义 将一组对象的共同特征抽象出来, 从而形成类的概念. 类包括数据成员和成员函数, 不能在类的声明中对数据成员进行初始化 声明类 形式为: clas ...

  6. C/C++编程笔记:C++入门知识丨函数和函数模板

    本篇要学习的内容和知识结构概览 函数的参数及其传递方式 1. 函数参数传递方式 传值: 传变量值: 将实参内存中的内容拷贝一份给形参, 两者是不同的两块内存 传地址值: 将实参所对应的内存空间的地址值 ...

  7. C/C++编程笔记:C++入门知识丨认识C++面向过程编程的特点

    一. 本篇要学习的内容和知识结构概览 二. 知识点逐条分析 1. 使用函数重载 C++允许为同一个函数定义几个版本, 从而使一个函数名具有多种功能, 这称之为函数重载. 像这样: 虽然函数名一样, 但 ...

  8. C/C++编程笔记:C++入门知识丨认识C++的函数和对象

    一. 本篇要学习的内容和知识结构概览 二. 知识点逐条分析 1. 混合型语言 C++源文件的文件扩展名为.cpp, 也就是c plus plus的简写, 在该文件里有且只能有一个名为main的主函数, ...

  9. UnityShader学习笔记1 — — 入门知识整理

    注:资料整理自<Unity Shader入门精要>一书 一.渲染流程概念阶段:  应用阶段:(1)准备好场景数据:(如摄像机位置,物体以及光源等)   (2)粗粒度剔除(Culling): ...

随机推荐

  1. CSS 3中-webkit-, -moz-, -o-, -ms-这些私有前缀的含义和兼容

    css3作为页面样式的表现语言,增加了很多新的属性,但是部分css3属性在一些浏览器上还处于试验阶段,所以为了有效的显示css3的样式,对应不同的浏览器内核需要不同的前缀声明,例如: -moz- :F ...

  2. JavaScript图形实例:H分形

    H分形是由一个字母H演化出迷宫一样场景的分形图案,其构造过程是:取一个中心点(x,y),以此中心点绘制一条长为L的水平直线和两条长为H的竖直直线,构成一个字母“H”的形状:再以两条竖直直线的上下共4个 ...

  3. 简单的SQL语句学习

    CREATE DATABASE db_test; USE db_test; CREATE TABLE USER( uid INT PRIMARY KEY AUTO_INCREMENT, usernam ...

  4. HTTP前世今生

    HTTP 是浏览器中最重要且使用最多的协议,是浏览器和服务器之间的通信语言.随着浏览器的发展,HTTP 为了能适应新的形式也在持续进化.已经历经0.9,1.0,1.1,2.0等几个阶段, 以及未来的3 ...

  5. 三种存储方式DAS、NAS、SAN

    ------------恢复内容开始------------ 一.DAS.NAS.SAN在存储领域的位置 随着主机.磁盘.网络等技术的发展,数据存储的方式和架构也在一直不停改变,本文主要介绍目前主流的 ...

  6. CSS(二)- 选择器 - 一定要搞懂的选择器优先级和权重问题

    css的优先级之前一直没怎么注意没当回事,总以为对同一元素靠后的渲染会覆盖前面的渲染,要是覆盖不了那就来个!important嘛.直到我那在学前端基础的后端伙伴拿一个问题问住了我,我才意识到这是重点中 ...

  7. python基础之打/解包及运算符与控制流程

    python基础之打/解包及运算符与控制流程 python中的解压缩(即序列类型的打包和解包) python提供了两个设计元祖和其他序列类型的处理的便利,也就是自动打包与自动解包功能,比如: data ...

  8. EM算法的收敛性

    https://blog.csdn.net/kevinoop/article/details/80522477

  9. Jmeter系列(45)- 详解 Jmeter 跨线程组取参数值的方法,免代码!

    如果你想从头学习Jmeter,可以看看这个系列的文章哦 https://www.cnblogs.com/poloyy/category/1746599.html 前言 用过 Jmeter 的同学应该都 ...

  10. python3利用cryptography 进行加密和解密

    我们的日常工作中,一定会遇到需要加密的数据,比如:密码.私密信息... ... 我们不仅要对他们进行加密,更需要对他们进行解密,因为毕竟我们的用户应该不会看得懂加密过后的字符串吧!!! 在python ...