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

运算符重载使用场景

常规赋值操作

我们现在有一个类

想要实现这种赋值操作

具体实现如下:

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

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

运算符重载的实质

表达式 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. html中doctype有几种类型 以及doctype的作用

    htm中doctype标签是一种标准通用标记语言的文档类型声明,它的目的是要告诉标准通用标记语言解析器,它应该使用什么样的文档类型定义(DTD)来解析文档. dotype 的特点: <!doct ...

  2. 用Python语言绘制股市OBV指标效果

    我的新书<基于股票大数据分析的Python入门实战>于近日上架,在这篇博文向大家介绍我的新书:<基于股票大数据分析的Python入门实战>里,介绍了这本书的内容.这里将摘录出部 ...

  3. Activity启动流程分析

    我们来看一下 startActivity 过程的具体流程.在手机桌面应用中点击某一个 icon 之后,实际上最终就是通过 startActivity 去打开某一个 Activity 页面.我们知道 A ...

  4. Github 新玩法 -- Profile ReadMe

    Github 新玩法 -- Profile ReadMe Intro 今天刷 Github 的时候偶然发现一个新的玩法,Github Profile ReadMe,可以在个人的 Profile 页面展 ...

  5. 开发者必备——API设计问题

    本文主要探讨RPC和RESTFul两种API风格的特点以及在开发中应该如何进行技术选型,同时截取了网上社区,文章一部分关于API设计的想法和观点供读者参考,取舍. 1,背景简述 API学名:应用程序接 ...

  6. 你是如何理解Vue的响应式系统的

    1.响应式系统简述: 任何一个 Vue Component 都有一个与之对应的 Watcher 实例. Vue 的 data 上的属性会被添加 getter 和 setter 属性. 当 Vue Co ...

  7. Navigation Nightmare POJ - 1984

    Navigation Nightmare Farmer John's pastoral neighborhood has N farms (2 <= N <= 40,000), usual ...

  8. 记一次WPF程序带参数启动

    问题:总共有两个程序.第一个程序使用Process带参数启动第二个程序. 网上一堆人都说什么重写Main入口啊 什么的.然后还一堆人跟着复制发文章.我也是醉了,简直是坑人.为何要舍近求远,直接重写AP ...

  9. Scala 基础(七):Scala 运算符

    1 算术运算符 算术运算符(arithmetic)是对数值类型的变量进行运算的,在Scala程序中使用的非常多. 细节说明: 1)对于除号“/”,它的整数除和小数除是有区别的:整数之间做除法时,只保留 ...

  10. 机器学习实战基础(十):sklearn中的数据预处理和特征工程(三) 数据预处理 Preprocessing & Impute 之 缺失值

    缺失值 机器学习和数据挖掘中所使用的数据,永远不可能是完美的.很多特征,对于分析和建模来说意义非凡,但对于实际收集数据的人却不是如此,因此数据挖掘之中,常常会有重要的字段缺失值很多,但又不能舍弃字段的 ...