当前课程知识点:C++语言程序设计进阶 > 第八章 多态性 > 运算符重载 > 运算符重载的规则
思考:用“+”、“-”能够实现复数的加减运算吗?
实现复数加减运算的方法 ——重载“+”、“-”运算符
运算符重载是对已有的运算符赋予多重含义,使同一个运算符作用于不同类型的数据时导致不同的行为。
C++ 几乎可以重载全部的运算符,而且只能够重载C++中已经有的。
不能重载的运算符:“.”、“.*”、“::”、“?:”
重载之后运算符的优先级和结合性都不会改变。
运算符重载是针对新类型数据的实际需要,对原有运算符进行适当的改造。例如:
使复数类的对象可以用“+”运算符实现加法;
是时钟类对象可以用“++”运算符实现时间增加1秒。
重载为类的非静态成员函数;
重载为非成员函数。
现在我们来学习运算符重载
相信大家
一定迫不及待地想知道
对于自定义的类型
我们怎么能够使用
这些系统里面
预先定义好的运算符呢
比如说我们能够
做复数的加法运算吗
C++里面没有复数类型
所以
如果要实现复数
这样一种数据结构
我们就需要自定义一个复数类
那自定义了复数类以后
它的对象并不能使用
加法运算符来做运算
那么怎么办呢
其实很简单
我们只要为复数类
重载加法运算符就可以了
它就可以做加法了
当然减法也是一样的了
那么重载运算符呢
实际上
就是将C++语法
预定义好的这些运算符
针对新的自定义类型
赋予它新的含义
这就是运算符重载
首先呢
我们要来了解一下
运算符重载的基本语法规则
C++几乎可以重载
全部的运算符
而且只能够重载C++中
已经有的
不能创造新的运算符
在已有的运算符的集合里面呢
也有这么几个运算符
它是不能被重载的
就是这里列出来的这几个
重载之后呢
运算符的优先级和结合性
都是不会改变的
运算符重载是针对
新类型数据的新的实际需要
而产生的
那么实际上呢
就是对原有的运算符
针对新的自定义数据类型
将他的功能进行适当地改造
比如说
我们接下来例题中会看到
使用复数类的对象
进行加法运算
那我们就要为复数类去重载
+运算符
那么我们要让时钟
可以实现时间增加1秒
自增1秒的功能
我们就要对时钟类
去重载自增运算符
那么重载运算符
是通过什么来实现的呢
通过函数来实现的
运算符重载
跟函数重载的原理是一样的
也就是说
比如说我们要为复数类
重载加法运算符
那就写一个实现加法功能的函数
放在复数类里面
就可以实现这个功能了
当然了这个函数名呢
它规则上有点特殊
要用operator这个关键字
加上运算符
这样来当做函数名
后面我们会详细地介绍
这个语法的
不仅我们可以在类体里面
写一个运算符函数
用这样的方式
为这个类的对象去重载运算符
而且呢还可以在类外
写一个普通的全局函数
来重载运算符
为什么我们需要这样两种形式呢
因为不是所有的运算符
都可以放在类体里面
作为成员函数来重载的
如果有的运算符
对于这个类来说
不能作为成员函数来重载
那么就需要把它写在类外
作为独立的函数
这样两种方式
我们都可以实现
运算符的重载
在接下来的两节中呢
就会给大家分别介绍
将运算符重载为成员函数
以及将运算符重载为
非成员函数的方法
-导学
--导学
-继承的基本概念和语法
-第七章 继承与派生--继承的基本概念和语法习题
-继承方式
-第七章 继承与派生--继承方式
-基类与派生类类型转换
-第七章 继承与派生--基类与派生类类型转换
-派生类的构造和析构
--派生类的构造函数
--派生类的析构函数
--第七章 继承与派生--派生类的构造和析构
-派生类成员的标识与访问
--虚基类
-第七章 继承与派生--派生类成员的标识与访问
-小结
--小结
-综合实例
--第七章综合实例
-实验七
--实验七
-导学
--导学
-第八章 多态性--导学
-运算符重载
--运算符重载的规则
-第八章 多态性--运算符重载
-虚函数
--虚函数
--虚析构函数
--虚表与动态绑定
-第八章 多态性--虚函数
-抽象类
--抽象类
--第八章 多态性--抽象类
-override与final
-第八章 多态性--override与final
-小结
--第八章小结
-综合实例
--第八章综合实例
-实验八
--实验八
- 第八章讲义
-导学
--导学
-模板
--函数模板
--类模板
-第九章 模板与群体数据--模板
-线性群体
--线性群体的概念
-第九章 模板与群体数据--线性群体
-数组
--数组类模板
-链表
--链表类模板
-第九章 模板与群体数据--链表
-栈
--栈类模板
--栈类模板课后习题
--例9-9 栈的应用课后习题
-队列
--队列类模板
-第九章 模板与群体数据--队列
-排序
--排序概述
--插入排序
--选择排序
--交换排序
-第九章 模板与群体数据--排序
-查找
--查找
--查找课后习题
-小结
--小结
-综合实例
--综合实例
-实验九
--实验九
- 第九章讲义
-导学
--导学
-泛型程序设计及STL的结构
--STL简介
-第十章 泛型程序设计与C++标准模板库--泛型程序设计及STL的结构
-迭代器
--迭代器
-第十章 泛型程序设计与C++标准模板库--迭代器
-容器的基本功能与分类
-第十章 泛型程序设计与C++标准模板库--容器的基本功能与分类
-顺序容器
--顺序容器的特征
--第十章 泛型程序设计与C++标准模板库--顺序容器
-关联容器
--集合
--映射
-第十章 泛型程序设计与C++标准模板库--关联容器
-函数对象
--函数对象
--函数适配器
-算法
--算法
-小结
--第十章小结
-综合实例
--综合实例
-实验十
--实验十
- 第十章讲义
-导学
--导学
-I/O流的概念及流类库结构
-第十一章 流类库与输入/输出--I/O流的概念及流类库结构
-输出流
--输出流概述
--向文本文件输出
--向二进制文件输出
--向字符串输出
-第十一章 流类库与输入/输出--输出流
-输入流
--输入流概述
--输入流应用举例
--从字符串输入
-第十一章 流类库与输入/输出--输入流
-输入/输出流
--输入/输出流
-第十一章 流类库与输入/输出--输入/输出流
-小结
--小结
-综合实例
--综合实例
-实验十一
--实验十一
- 第十一章讲义
-导学
--第12章导学
-异常处理的思想与程序实现
-第十二章 异常处理--异常处理的思想与程序实现
-异常处理中的构造与析构
-第十二章 异常处理--异常处理中的构造与析构
-标准程序库异常处理
-第十二章 异常处理--标准程序库异常处理
-小结
--第12章小结
-综合实例
--综合实例
-实验十二
--实验十二
- 第十二章讲义