SMIE-121 Software Design II School of Mobile Information Engineering, Sun Yat-sen University Lecture.

Slides:



Advertisements
Similar presentations
第十二章 常微分方程 返回. 一、主要内容 基本概念 一阶方程 类 型 1. 直接积分法 2. 可分离变量 3. 齐次方程 4. 可化为齐次 方程 5. 全微分方程 6. 线性方程 类 型 1. 直接积分法 2. 可分离变量 3. 齐次方程 4. 可化为齐次 方程 5. 全微分方程 6. 线性方程.
Advertisements

空间群 space groups 晶轴和直角坐标轴
基本知识和几何要素的投影 模块一: 字体练习 第一章 制图的基本知识与基本技能 题目提示返回.
第 12 章位运算 C 语言兼具高级语言及低级语言的特性,因此 适合编写系统软件。 C 语言具备低级语言的特性 就在于它能直接对硬件进行操作,即位运算。 所谓位运算是指,按二进制位进行的运算。 例如,将一个存储单元中各二进位左移或右移一 位等。
位置相关查询处理 研究背景及意义 移动计算、无线通信以及定位技术的快速发展,使 得位置相关的查询处理及基于位置的信息服务技术 已经成为一个热点研究领域 。 大量的应用领域 ( 如地理信息系统、智能导航、交 通管制、天气预报、军事、移动电子商务等 ) 均迫 切需要有效地查询这些数据对象。
第二章 数据信息 自然语言 字 -  单词 -  句子-  语言 计算机语言 字符-  词法单位-  程序-  语言 ↑ 词法 文法.
© Copyright 1992–2004 by Deitel & Associates, Inc. and Pearson Education Inc. All Rights Reserved. Chapter 18 - C++ Operator Overloading Outline 18.1Introduction.
编译程序 构造原理和实现技术 授课教师:吕江花. 第一章 编译程序概述 主要内容: 几个基本概念 编译器的工作过程概述 编译器各个阶段的功能描述 编译程序的实现途径.
嵌入式操作系统 陈香兰 Fall 系统调用 10/27/09 嵌入式 OS 3/12 系统调用的意义  操作系统为用户态进程与硬件设备进行交互提供 了一组接口 —— 系统调用  把用户从底层的硬件编程中解放出来  极大的提高了系统的安全性  使用户程序具有可移植性.
地理信息系统概述. 数据和信息 (Data & Information) 数据 原始事实 如:员工姓名, 数据可以有数值、图形、声音、视觉数据等 信息 以一定规则组织在一起的事实的集合。
第 2 章 数据流分析 内容概述 数据流分析推导的是数据沿着程序执行路 径流动的信息 – 过程内的分析:可用表达式分析、到达-定值分 析等 – 过程间分析 –Shape 分析 – 理论基础 – 数据流方程的求解.
吉林大学远程教育课件 主讲人 : 杨凤杰学 时: 64 ( 第六十二讲 ) 离散数学. 最后,我们构造能识别 A 的 Kleene 闭包 A* 的自动机 M A* =(S A* , I , f A* , s A* , F A* ) , 令 S A* 包括所有的 S A 的状态以及一个 附加的状态 s.
分析化学与无机化学中溶液 pH 值计算的异同比较 谢永生  分析化学是大学化学系的一门基础课,课 时较少,其内容主要是无机物的化学分析。 分析化学是以无机化学作为基础的,我们 都是在已掌握一定的无机化学知识后才学 习分析化学 。所以在分析 化学的学习中会 重复许多无机化学内容,造成学习没有兴.
1 为了更好的揭示随机现象的规律性并 利用数学工具描述其规律, 有必要引入随 机变量来描述随机试验的不同结果 例 电话总机某段时间内接到的电话次数, 可用一个变量 X 来描述 例 检测一件产品可能出现的两个结果, 也可以用一个变量来描述 第五章 随机变量及其分布函数.
论匀强磁场条件下磁通回 路的取法 物理四班 物理四班 林佳宁 (PB ) 林佳宁 (PB ) 指导老师 : 秦敢 指导老师 : 秦敢.
主讲教师:陈殿友 总课时: 124 第八讲 函数的极限. 第一章 机动 目录 上页 下页 返回 结束 § 3 函数的极限 在上一节我们学习数列的极限,数列 {x n } 可看作自变量 为 n 的函数: x n =f(n),n ∈ N +, 所以,数列 {x n } 的极限为 a, 就是 当自变量 n.
吉林大学远程教育课件 主讲人 : 杨凤杰学 时: 64 ( 第三十八讲 ) 离散数学. 第八章 格与布尔代数 §8.1 引 言 在第一章中我们介绍了关于集 合的理论。如果将 ρ ( S )看做 是集合 S 的所有子集组成的集合, 于是, ρ ( S )中两个集合的并 集 A ∪ B ,两个集合的交集.
吉林大学远程教育课件 主讲人 : 杨凤杰学 时: 64 ( 第四十八讲 ) 离散数学. 例 设 S 是一个非空集合, ρ ( s )是 S 的幂集合。 不难证明 :(ρ(S),∩, ∪,ˉ, ,S) 是一个布尔代数。 其中: A∩B 表示 A , B 的交集; A ∪ B 表示 A ,
第十一章 曲线回归 第一节 曲线的类型与特点 第二节 曲线方程的配置 第三节 多项式回归.
第二部分 行政法律关系主体 第一节 行政主体 一、行政主体 (一)行政主体的概念 cc (二)行政主体资格含义及构成要件 CASE1CASE1\CASE2CASE2 (三)行政主体的职权和职责 1 、行政职权的概念及内容 2 、行政职权的特点 3 、行政职责.
第三章 C 数据及其表达式 2 回顾  程序是为执行一项任务而编写的有序指令集  算法是解决问题的具体方法和步骤  流程图是算法的图形化表现形式  C 程序的编译和运行过程  编译器将源程序转换成机器能理解的程序  连接器用于连接相关的目标文件以生成可执行程序  进制间的转换  补码.
线性代数习题课 吉林大学 术洪亮 第一讲 行 列 式 前面我们已经学习了关 于行列式的概念和一些基本 理论,其主要内容可概括为:
吉林大学远程教育课件 主讲人 : 杨凤杰学 时: 64 ( 第二十五讲 ) 离散数学. 定理 群定义中的条件 ( 1 )和( 2 )可以减弱如下: ( 1 ) ’ G 中有一个元素左壹适合 1 · a=a; ( 2 ) ’ 对于任意 a ,有一个元素左逆 a -1 适 合 a -1 ·
 2000 Prentice Hall, Inc. All rights reserved. Chapter 18 - Operator Overloading Outline 18.1Introduction 18.2Fundamentals of Operator Overloading 18.3Restrictions.
第二章 随机变量及其分布 第一节 随机变量及其分布函数 一、随机变量 用数量来表示试验的基本事件 定义 1 设试验 的基本空间为 , ,如果对试验 的每一个基 本事件 ,规定一个实数记作 与之对应,这样就得到一个定义在基本空 间 上的一个单值实函数 ,称变量 为随机变量. 随机变量常用字母 、 、 等表示.或用.
第 4 章 过程与变量的作用范围. 4.1 Visual Basic 的代码模块 Visual Basic 的应用程序是由过程组成的, 过程代码存放在模块中。 Visual Basic 提供了 三类模块,它们是窗体模块、标准模块和类 模块。 窗体模块 窗体模块是大多数 Visual Basic.
数 学 系 University of Science and Technology of China DEPARTMENT OF MATHEMATICS 第 3 章 曲线拟合的最小二乘法 给出一组离散点,确定一个函数逼近原函数,插值是这样的一种手段。 在实际中,数据不可避免的会有误差,插值函数会将这些误差也包括在内。
实验三: 用双线性变换法设计 IIR 数字滤波器 一、实验目的 1 熟悉用双线性变换法设计 IIR 数字滤波器的原理与方法。 2 掌握数字滤波器的计算机仿真方法。 3 通过观察对实际心电图信号的滤波作用, 获得数字滤波的感性知 识。
语义分析 主要内容:  语义分析概述 ( 必要性、功能、描述方法 )  符号表  类型表达式  声明和程序体的语义分析.
第六章 文件管理. 程序设计中,文件是十分重要的,许多情况下, 使用文件可以高效地解决实际问题。有用的数据在后 备存储器上以文件的形式存储后,我们就可以通过文 件对数据进行访问、操作以及检索,这称为文件管理。 6.1 文件的分类 根据文件访问类型的不同,可以将文件分为三类: 顺序文件、随机文件和二进制文件。
量子化学 第四章 角动量与自旋 (Angular momentum and spin) 4.1 动量算符 4.2 角动量阶梯算符方法
主讲教师:陈殿友 总课时: 124 第十一讲 极限的运算法则. 第一章 二、 极限的四则运算法则 三、 复合函数的极限运算法则 一 、无穷小运算法则 机动 目录 上页 下页 返回 结束 §5 极限运算法则.
在发明中学习 线性代数 概念的引入 李尚志 中国科学技术大学. 随风潜入夜 : 知识的引入 之一、线性方程组的解法 加减消去法  方程的线性组合  原方程组的解是新方程的解 是否有 “ 增根 ” ?  互为线性组合 : 等价变形  初等变换  高斯消去法.
东南大学计算中心 网站应用与实践 主讲人 吴俊. 2 东南大学计算中心 网站制作流程  确定主题、风格  规划栏目、收集素材  版面设计、配色  编辑页面  测试发布 FrontPage 要完成的任务.
§2.2 一元线性回归模型的参数估计 一、一元线性回归模型的基本假设 二、参数的普通最小二乘估计( OLS ) 三、参数估计的最大或然法 (ML) 四、最小二乘估计量的性质 五、参数估计量的概率分布及随机干 扰项方差的估计.
第一节 相图基本知识 1 三元相图的主要特点 (1)是立体图形,主要由曲面构成; (2)可发生四相平衡转变; (3)一、二、三相区为一空间。
9的乘法口诀 1 .把口诀说完全。 二八( ) 四六( ) 五八( ) 六八( ) 三七( ) 三八( ) 六七( ) 五七( ) 五六( ) 十六 四十八 四十二 二十四 二十一 三十五 四十 二十四 三十 2 .口算, 并说出用的是哪句口诀。 8×8= 4×6= 7×5= 6×8= 5×8=
第 3 章 控制流分析 内容概述 – 定义一个函数式编程语言,变量可以指称函数 – 以 dynamic dispatch problem 为例(作为参数的 函数被调用时,究竟执行的是哪个函数) – 规范该控制流分析问题,定义什么是可接受的控 制流分析 – 定义可接受分析在语义模型上的可靠性 – 讨论分析算法.
吉林大学远程教育课件 主讲人 : 杨凤杰学 时: 64 ( 第五十三讲 ) 离散数学. 定义 设 G= ( V , T , S , P ) 是一个语法结构,由 G 产生的语言 (或者说 G 的语言)是由初始状态 S 演绎出来的所有终止符的集合, 记为 L ( G ) ={w  T *
第二十四讲 相位延时系统 相位超前系统 全通系统. 一、最小与最大相位延时系统、最小 与最大相位超前系统 LSI 系统的系统函数: 频率响应:
编译原理总结. 基本概念  编译器 、解释器  编译过程 、各过程的功能  编译器在程序执行过程中的作用  编译器的实现途径.
周期信号的傅里叶变换. 典型非周期信号 ( 如指数信号, 矩形信号等 ) 都是满足绝对可 积(或绝对可和)条件的能量信号,其傅里叶变换都存在, 但绝对可积(或绝对可和)条件仅是充分条件, 而不是必 要条件。引入了广义函数的概念,在允许傅里叶变换采用 冲激函数的前提下, 使许多并不满足绝对可积条件的功率.
报告人:黄磊 缓冲溶液的积分缓冲容量. 缓冲指数的概念是 Vanslyke 在 1922 年提出 的,意义是当缓冲溶液改变一个单位时需 加入酸碱物质的量 即 这里的缓冲指数指的是微分缓冲容量,是 加酸碱物质的量随着 pH 值的变化率 1 ,微分缓冲容量.
 符号表  标识符的作用: 声明部分:定义了各种对象及对应的属性和 使用规则。 程序体:对所定义的对象进行各种操作。 $ididname IdnameAttributeIR  必要性 Token : 新表-符号表(种类、类型等信息):
Department of Mathematics 第二章 解析函数 第一节 解析函数的概念 与 C-R 条件 第二节 初等解析函数 第三节 初等多值函数.
1 第 7 章 存储过程、触发器和程序包 在很多时候,都需要保存 PL/SQL 程序块,以便 随后可以重新使用。这也意味着,程序块需要一个名 称,这样需才可以调用或者引用它。命名的 PL/SQL 程序块可被独立编译并存储在数据库中,任何与数据 库相连接的应用程序都可以访问这些存储的 PL/SQL 程序块。
Chapter 18 - Operator Overloading Associate Prof. Yuh-Shyan Chen Dept. of Computer Science and Information Engineering National Chung-Cheng University.
首 页 首 页 上一页 下一页 本讲内容本讲内容 视图,剖视图(Ⅰ) 复习: P107 ~ P115 作业: P48(6-2,6-4), P49( 去 6-6) P50, P51(6-13), P52 P50, P51(6-13), P52 P53 (6-18,6-20) P53 (6-18,6-20)
《 UML 分析与设计》 交互概述图 授课人:唐一韬. 知 识 图 谱知 识 图 谱知 识 图 谱知 识 图 谱.
Introduction to Automatic Control The Laplace Transform Li Huifeng Tel:
1 、如果 x + 5 > 4 ,那么两边都 可得 x >- 1 2 、在- 3y >- 4 的两边都乘以 7 可得 3 、在不等式 — x≤5 的两边都乘以- 1 可得 4 、将- 7x — 6 < 8 移项可得 。 5 、将 5 + a >- 2 a 移项可得 。 6 、将- 8x < 0.
名探柯南在侦查一个特大盗窃集团过程 中,获得藏有宝物的密码箱,密码究竟 是什么呢?请看信息: ABCDEF( 每个字 母表示一个数字 ) A :是所有自然数的因数 B :既有因数 5 ,又是 5 的倍数 C :既是偶数又是质数 D :既是奇数又是合数 EF :是 2 、 3 、 5 的最小公倍数.
项目七: PLC 功能指令应用 带进位循环左移指令 XXXXX. 项目七: PLC 功能指令应用 FX2 系列可编程控制器移位控制指令有移位、循环移位、字移位 及先进先出 FIFO 指令等 10 条指令。 带进位循环右移指令 RCR 带进位循环左移指令 RCL 字右移位指令 WSFR 先入先出读出指令.
Java 水晶报表. 目录 水晶报表开发 (CrystalReports 2008) Java 水晶报表 (JBuilder 2005) 报表项目布署 (WebSphere v6.1)
§10.2 对偶空间 一、对偶空间与对偶基 二、对偶空间的有关结果 三、例题讲析.
请同学们仔细观察下列两幅图有什么共同特点? 如果两个图形不仅形状相同,而且每组对应点所在的直线 都经过同一点, 那么这样的两个图形叫做位似图形, 这个点叫做位 似中心.
表单自定义 “ 表单自定义 ” 功能是用于制作表单的 工具,用数飞 OA 提供的表单自定义 功能能够快速制作出内容丰富、格 式规范、美观的表单。
项目 1 典型低压电器 的拆装、检修及调试 任务 2 交流接触器的拆装与检修 接触器是一种自动的电磁式自动开关,是 一种依靠电磁力作用使触点闭合或分离的自 动电器,用于接通和断开电动机或其它用电 设备电路。适用于远距离频繁地接通或断开 交直流主电路及大容量控制电路。交流接触 器具有控制容量大、操作方便、便于远距离.
力的合成 力的合成 一、力的合成 二、力的平行四边形 上一页下一页 目 录 退 出. 一、力的合成 O. O. 1. 合力与分力 我们常常用 一个力来代替几个力。如果这个 力单独作用在物体上的效果与原 来几个力共同作用在物体上的效 果完全一样,那么,这一个力就 叫做那几个力的合力,而那几个 力就是这个力的分力。
SMIE-121 Software Design II School of Mobile Information Engineering, Sun Yat-sen University Lecture.
C++ 程序语言设计 Chapter 11: Operator Overloading. Outline  Operator overloading  Using of friends  Overload “
逻辑设计基础 1 第 7 章 多级与(或)非门电路 逻辑设计基础 多级门电路.
人 有 悲 欢 离 合, 月有阴晴圆缺。月有阴晴圆缺。 华师大版七年级数学第二册 海口市第十中学 数学组 吴锐.
1 第三章 数列 数列的概念 考点 搜索 ●数列的概念 ●数列通项公式的求解方法 ●用函数的观点理解数列 高考 猜想 以递推数列、新情境下的 数列为载体, 重点考查数列的通 项及性质, 是近年来高考的热点, 也是考题难点之所在.
第二节. 广告牌为什么会被风吹倒? 结构的稳定性: 指结构在负载的作用下 维持其原有平衡状态的能力。 它是结构的重要性质之一。
目录 上页 下页 返回 结束 二、无界函数反常积分的审敛法 * 第五节 反常积分 无穷限的反常积分 无界函数的反常积分 一、无穷限反常积分的审敛法 反常积分的审敛法  函数 第五章 第五章.
§7.2 估计量的评价标准 上一节我们看到,对于总体 X 的同一个 未知参数,由于采用的估计方法不同,可 能会产生多个不同的估计量.这就提出一 个问题,当总体的一个参数存在不同的估 计量时,究竟采用哪一个好呢?或者说怎 样评价一个估计量的统计性能呢?下面给 出几个常用的评价准则. 一.无偏性.
Operator Overloading.
Chapter 18 - C++ Operator Overloading
Chapter 18 - Operator Overloading
Presentation transcript:

SMIE-121 Software Design II School of Mobile Information Engineering, Sun Yat-sen University Lecture 07. C++ Operator Overloading

Software Design II – C++ Operator Overloading 2 / 49September 8, 2015 Design and programming are human activities; forget that and all is lost. --Bjarne Stroustrup, 1991

Software Design II – C++ Operator Overloading 3 / 49September 8, 2015 Outline Introduction Class Practice Methods vs. Friend Functions Unary vs. Binary Case Study: Array Other Operator Overloadings

Software Design II – C++ Operator Overloading 4 / 49September 8, 2015 ( 1 )运算符重载是对已有的运算符赋予多重含义,使同一个运算符作用 于不同类型的数据时,产生不同类型的行为。 C++ 允许同一运算符具 有多种不同运算功能的机制。 ( 2 )为什么需要运算符重载: C++ 中预定义了许多运算符, 能够满足用 户的一般应用要求, 但是其运算的对象应是基本数据类型, 而不适用于 用户自定义数据类型 ( 如类 ), 这可以使用运算符重载。 ( 3 )明智地使用操作符重载可以使类类型的使用像内置类型一样直观 ( 4 )操作符重载的实质是函数重载。 Introduction

Software Design II – C++ Operator Overloading 5 / 49September 8, 2015 Operator overloading Use traditional operators with user-defined objects Straightforward and natural way to extend C++ Requires great care When overloading is misused, programs become difficult to understand class Point { public: Point(int xx=0,int yy=0){ x=xx;y=yy; } int getX(); int getY(); //... private: int x; int y ; }; Point p1(1,1),p2(3,3) ,实现 “p1 + p2” 则需要编写程序来说明 “+” 如何作 用于 Point 对象( p1, p2 ),即 p1 的私有成员 x , y 与 p2 的私有成员 x , y 分别相 加这一功能。 Introduction

Software Design II – C++ Operator Overloading 6 / 49September 8, 2015 Use operator overloading to improve readability Avoid excessive or inconsistent usage Format Write function definition as normal( 重载函数跟普通函数一样, 具有返回类型和形参表 ) Function name is keyword operator followed by the symbol for the operator being overloaded. operator+ would be used to overload the addition operator ( + ). Fundamentals of Operator Overloading

Software Design II – C++ Operator Overloading 7 / 49September 8, 2015 Assignment operator ( = ) may be used with every class without explicit overloading memberwise assignment Same is true for the address operator ( & ) class MyClass { public:... MyClass& operator=(const MyClass &rhs);... } MyClass a, b;... b = a; // Same as b.operator=(a); Fundamentals of Operator Overloading

Software Design II – C++ Operator Overloading 8 / 49September 8, 2015 Most of C++’s operators can be overloaded 有四个符号( +, -, * 和 & )既可作一元操作符又可作二元操作符, 可以同时定义一元和二元操作符 重载操作符不能改变原操作符的优先级、结合性或操作数目 重载操作符必须具有至少一个类类型或枚举类型的操作数,也就是 说重载操作符不能重新定义用于内置类型对象的操作符的含义,比 如不能重载 ”+” 号操作符用于两个整数相加。 Restrictions on Operator Overloading

Software Design II – C++ Operator Overloading 9 / 49September 8, 2015 Outline Introduction Class Practice Methods vs. Friend Functions Unary vs. Binary Case Study: Array Other Operator Overloadings

Software Design II – C++ Operator Overloading 10 / 49September 8, 2015 Write an overloading for the operator “*=” for this class class Point { public: Point(int xx=0,int yy=0){ x=xx;y=yy; } int getX(); int getY(); //... private: int x; int y; }; Point p1(1,1),p2(3,3) ,实现 “p1 *= p2” ,即 p1 的私有成员 x , y 与 p2 的私有成员 x , y 分别相乘,并将结果分别赋于 p1 的私有成员。 Class practice

Software Design II – C++ Operator Overloading 11 / 49September 8, 2015 Outline Introduction Class Practice Methods vs. Friend Functions Unary vs. Binary Case Study: Array Other Operator Overloadings

Software Design II – C++ Operator Overloading 12 / 49September 8, 2015 Operator functions Can be member or non-member functions Overloading the assignment operators i.e: (), [], ->, = Operator must be a member function Operator Functions as Class Members vs. as friend Functions

Software Design II – C++ Operator Overloading 13 / 49September 8, 2015 Operator functions as member functions Leftmost operand must be an object (or reference to an object) of the class If left operand of a different type( 与定义的 class 不一致 ), operator function must be a non-member function A non-member operator function must be a friend if private or protected members of that class are accessed directly 如果需要访问类的私有或者保护对象 Operator Functions as Class Members vs. as friend Functions

Software Design II – C++ Operator Overloading 14 / 49September 8, 2015 Non-member overloaded operator functions Enable the operator to be commutative( 可交换的 ) , because the leftmost operand can be another type. HugeInteger bigInteger1; long int number; bigInteger1 = number + bigInteger1; or bigInteger1 = bigInteger1 + number; Operator Functions as Class Members vs. as friend Functions

Software Design II – C++ Operator Overloading 15 / 49September 8, 2015 Friend functionMember Function a + boperator+(a,b)a.operator+(b) a++operator++(a,0)a.operator++(0) -aoperator-(a)a.operator-( ) 类成员的操作符函数与其等价的友元函数: Operator Functions as Class Members vs. as friend Functions

Software Design II – C++ Operator Overloading 16 / 49September 8, 2015 友元运算符函数无 this 指针,因而在函数体内必须通过对象 名来使用 private 成员数据;一般将一元运算符函数重载为 类运算符函数( “ = ” 也必须)。因为一元运算符时常需要用 到 this 指针(为什么?) 一般将二元运算符重载为友元运算符函数,以免出现使用 错误。因为时常需要操作数可交换 “ =” 、 “ () ” 、 “ [] ” 和 “ ->” 不能重载为友元。 Operator Functions as Class Members vs. as friend Functions

Software Design II – C++ Operator Overloading 17 / 49September 8, 2015 Overloaded > operators Must have left operand of types ostream &, istream & respectively It must be a non-member (friend) function (left operand not an object of the class) It must be a friend function if it accesses private data members Overloading Stream-Insertion and Stream-Extraction Operators 语法: friend operator ( 形参表 ) { 函数体; }

Software Design II – C++ Operator Overloading 18 / 49September 8, 2015 Overloading Stream-Insertion and Stream-Extraction Operators both design and programming comply with the top-down & step-wised refinement methodology

Outline fig18_03.cpp (1 of 3)

Outline fig18_03.cpp (2 of 3)

Outline fig18_03.cpp (3 of 3) Enter phone number in the form (123) : (800) The phone number entered was: (800)

Software Design II – C++ Operator Overloading 22 / 49September 8, 2015 Outline Introduction Class Practice Methods vs. Friend Functions Unary vs. Binary Case Study: Array Other Operator Overloadings

Software Design II – C++ Operator Overloading 23 / 49September 8, 2015 Overloading unary operators Avoid friend functions and friend classes unless absolutely necessary. Use of friend s violates the encapsulation of a class. As a member function: class String { public: bool operator!() const;... }; operator ( 形参表 ) { 函数体; } Overloading Unary Operators

Software Design II – C++ Operator Overloading 24 / 49September 8, 2015 Overloaded binary operators Non- static member function, one argument Non-member function (friend), two arguments class String { public: const String &operator+=( const String & );... }; // end class String y += z; equivalent to y.operator+=( z ); Overloading Binary Operators

Software Design II – C++ Operator Overloading 25 / 49September 8, 2015 Example class String { friend const String &operator+=( String &, const String & );... }; // end class String y += z; equivalent to operator+=( y, z ); 语法: friend operator ( 形参表 ) { 函数体; } Overloading Binary Operators

Software Design II – C++ Operator Overloading 26 / 49September 8, 2015 Outline Introduction Class Practice Methods vs. Friend Functions Unary vs. Binary Case Study: Array Other Operator Overloadings

Software Design II – C++ Operator Overloading 27 / 49September 8, 2015 Implement an Array class with Range checking Array assignment Arrays that know their size Outputting/inputting entire arrays with > Array comparisons with == and != Case Study: An Array class

Outline array1.h (1 of 2)

Outline array1.h (2 of 2) why there are two operator[] methods here?

Software Design II – C++ Operator Overloading 30 / 49September 8, 2015 array1.cpp (1 of 6)

Outline array1.cpp (2 of 6)

Outline array1.cpp (3 of 6)

Outline array1.cpp (3 of 6)

Outline array1.cpp (4 of 6)

Outline array1.cpp (5 of 6)

Outline array1.cpp (6 of 6)

Outline fig18_04.cpp (1 of 4)

Outline fig18_04.cpp (2 of 4)

Outline fig18_04.cpp (3 of 4)

Outline fig18_04.cpp (4 of 4)

Outline Array output (1 of 1) # of arrays instantiated = 0 # of arrays instantiated = 2 Size of array integers1 is 7 Array after initialization: Size of array integers2 is 10 Array after initialization: Input 17 integers: After input, the arrays contain: integers1: integers2: Evaluating: integers1 != integers2 They are not equal Size of array integers3 is 7 Array after initialization:

Outline Array output (2 of 2) Assigning integers2 to integers1: integers1: integers2: Evaluating: integers1 == integers2 They are equal integers1[5] is 13 Assigning 1000 to integers1[5] integers1: Attempt to assign 1000 to integers1[15] Assertion failed: 0 <= subscript && subscript < size, file Array1.cpp, line 95 abnormal program termination

Software Design II – C++ Operator Overloading 43 / 49September 8, 2015 Cast operator Convert objects into built-in types or other objects Conversion operator must be a non- static member function. Cannot be a friend function 形参表必须为空 不能指定返回类型,但是必须显式返回一个指定类型的值 转换函数采用如下通用形式: operator type(); type 表示内置类型名、类类型名或由类型别名定义的名字,对任 何可作为函数返回类型的类型(除了 void 之外)都可以定义 转换函数。 For user-defined class A A::operator char *() const; A::operator int() const; A::operator otherClass() const; When compiler sees (char *) s it calls s.operator char*() Converting between Types

Software Design II – C++ Operator Overloading 44 / 49September 8, 2015 Outline Introduction Class Practice Methods vs. Friend Functions Unary vs. Binary Case Study: Array Other Operator Overloadings

Software Design II – C++ Operator Overloading 45 / 49September 8, 2015 The compiler can call these functions to create temporary objects. If s is not of type char * Calls A::operator char *() const; for cout << s; Converting between Types

Software Design II – C++ Operator Overloading 46 / 49September 8, 2015 Pre/post-incrementing/decrementing operators Can be overloaded How does the compiler distinguish between the two? Prefix versions overloaded same as any other prefix unary operator would be. i.e. d1.operator++(); for ++d1; Postfix versions When compiler sees postincrementing expression, such as d1++; Generates the member-function call d1.operator++( 0 ); Prototype: Date::operator++( int ); Overloading ++ and --

Software Design II – C++ Operator Overloading 47 / 49September 8, 2015 前置单目运算符和后置单目运算符重载的区别:函数的形参。 语法规定 : 前置单目运算符重载为成员函数时没有形参 后置单目运算符重载为成员函数时,需要有一个 int 型形参。 (这个 int 型参数在函数体中并不使用, 专门用来区别前置与后置) Overloading ++ and --

Software Design II – C++ Operator Overloading 48 / 49September 8, 2015 Class Diagram class name attributes methods composition dependency, friend function Align elements as possible No cross lines, no diagonal lines

Software Design II – C++ Operator Overloading 49 / 49September 8, 2015 Thank you!